博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Duilib自定义控件响应指定命令(转载)
阅读量:6094 次
发布时间:2019-06-20

本文共 1811 字,大约阅读时间需要 6 分钟。

转载:

转载:

转载:

 

duilib在UIManager.h里的EVENTTYPE_UI枚举里定义了很多控件命令,如字符输入、双击、鼠标离开等等,然而这些事件不是在所有控件上都会得到处理,所以当我们有需要响应这些事件而对应的原生控件又没有处理时,那就要自己派生一个控件去处理这个的事情了。方法很简单:继承需要的控件,然后覆盖它的虚函数virtual void DoEvent(TEventUI& event),调用SendNotify函数,把要处理的事件告诉UIManager。这样控件所在的对话框就能收到对应该事件的消息。

 

下面举个例子,让CHorizontalLayoutUI响应鼠标进入事件,效果如下:

 第一步:自定义新控件,继承CHorizontalLayoutUI

1 class CHorizontalLayoutUIEx : public CHorizontalLayoutUI2 {3 public:4     virtual void DoEvent(TEventUI& event); //覆盖处理UI事件的虚函数5     const static CDuiString controlLabel;6 };

第二步:实现DoEvent()函数,转发UIEVENT_MOUSEENTER通知

1 void CHorizontalLayoutUIEx::DoEvent( TEventUI& event ) 2 { 3     if( event.Type == UIEVENT_MOUSEENTER ) 4     { 5         //告诉UIManager这个消息需要处理 6         m_pManager->SendNotify(this, DUI_MSGTYPE_MOUSEENTER); 7         return; 8     } 9     10     //其他事件用父类方法处理11     __super::DoEvent(event);12 }

第三部:在使用该控件的界面类响应上一步通知的消息

头文件声明:

1 class MainDlg:    public WindowImplBase2 {3 public:4     DUI_DECLARE_MESSAGE_MAP(); //声明
<消息,响应函数>
映射5 void OnMouseEnter(TNotifyUI& msg); //声明鼠标进入响应函数 6 }

cpp实现:

1 //定义
<消息,响应函数>
映射关系 2 DUI_BEGIN_MESSAGE_MAP(MainDlg,WindowImplBase) 3 DUI_ON_MSGTYPE(DUI_MSGTYPE_MOUSEENTER,OnMouseEnter) 4 DUI_END_MESSAGE_MAP() 5 6 //鼠标进入响应函数实现 7 void MainDlg::OnMouseEnter( TNotifyUI& msg ) 8 { 9 CDuiString controlName = msg.pSender->GetName();10 if ( controlName == _T("optALayout") || controlName == _T("optBLayout") ||11 controlName == _T("optCLayout") || controlName == _T("optDLayout"))12 {13 CHorizontalLayoutUI* layout = dynamic_cast
(msg.pSender);14 layout->SetBorderColor(0xFF58A1CC); //设置描边颜色15 layout->SetBorderSize(1); //设置描边宽度16 CControlUI* deleteBtn = layout->FindSubControl(_T("delete"));17 deleteBtn->SetVisible(true);18 }19 }

 

你可能感兴趣的文章
easyui datagrid 行编辑功能
查看>>
类,对象与实例变量
查看>>
HDU 2818 (矢量并查集)
查看>>
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
JPGraph
查看>>
navicat for mysql 10.0.11 注册码
查看>>
EventToCommand is not found in MVVMLight
查看>>
实验二 Java面向对象程序设计
查看>>
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
(转)HTML的代码(从朋友那转的,看着觉得会有用就转了)
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>