开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 2538|回复: 0

[WinForm] DirectX窗体标题栏中的元素点击事件不能正确触发的解决方法

[复制链接]

0

精华

5291

贡献

6059

赞扬

管理员

帖子
1176
软币
22629
在线时间
4467 小时
注册时间
2013-6-7

黄马甲

发表于 2022-12-29 14:44:22 | 显示全部楼层 |阅读模式
大家知道,在DevExpress的DirectXForm中我们可以自定义窗体样式,包括系统按钮和自定义工具栏。
其中有三个特定的按钮为系统窗体自带的“最小化”、“最大化/还原”、“关闭”的功能按钮。这三个按钮无需手动处理点击事件,只需将按钮的id设置为“minimizebutton”、“maximizebutton”或“closebutton” 就能实现对应的功能。
对于系统标题栏中的其它按钮点击事件我们需要手动处理。
[HTML] 纯文本查看 复制代码
<div class="shadowframe">
        <div class="frame" id="frame">
                <div class="titlebar">
                        <div class="form-caption">DirectX窗体</div>
                        <div class="form-sysbtns">
                                <img class="sysbtns" src="SystemButtonMenu" id="sbar_menubutton"/><!-- 自定义菜单按钮 -->
                                <img class="sysbtns" src="SystemButtonMinimize" id="minimizebutton"/><!-- 最小化系统按钮 -->
                                <img class="sysbtns" src="SystemButtonMaximize" id="maximizebutton"/><!-- 最大化/还原系统按钮 -->
                                <img class="sysbtns" src="SystemButtonClose" id="closebutton"/><!-- 关闭系统按钮 -->
                        </div>
                </div>
                <div class="content" id="content">
                        <!--<div class="contenttext">Application Content</div>-->
                </div>
        </div>
</div>

[C#] 纯文本查看 复制代码
this.HtmlElementMouseClick += (sender, e) => {
    switch (e.ElementId)
    {
        case "sbar_menubutton":
        //do something
        break;
    }
};

需要注意的是,其它部位的元素点击事件这样处理就可以了,但是窗体标题栏上的元素会出现不能正确触发点击事件的情况(有时候快速双击可以触发点击事件)。发生这种情况的原因是因为窗体的标题栏会截获所有鼠标事件,当指针位于标题栏上并且按下鼠标按钮时,程序默认将此操作视为窗体拖动操作的开始,所以如果需要使标题栏元素具有互交性我们需要在HtmlElementMouseDown事件中将MouseArgs.Handled 设置为 true,代码如下:
[C#] 纯文本查看 复制代码
this.HtmlElementMouseDown += (sender, e) => {
    var args = e.MouseArgs as DXMouseEventArgs;
    if (e.ElementId.StartsWith("sbar_"))
        args.Handled = true;
};


这样就可以将所有名称以"sbar_"开头的按钮点击视为已处理操作,也就不会出现系统拦截的情况了。
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-22 21:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表