Duilib自定义控件响应指定命令(转载)
转载:http://blog.csdn.net/panxianzhan/article/details/50772893
转载:http://www.cnblogs.com/duguxue/p/3922686.html
转载:http://blog.csdn.net/fighton/article/details/76110371
duilib在UIManager.h里的EVENTTYPE_UI枚举里定义了很多控件命令,如字符输入、双击、鼠标离开等等,然而这些事件不是在所有控件上都会得到处理,所以当我们有需要响应这些事件而对应的原生控件又没有处理时,那就要自己派生一个控件去处理这个的事情了。方法很简单:继承需要的控件,然后覆盖它的虚函数virtual void DoEvent(TEventUI& event),调用SendNotify函数,把要处理的事件告诉UIManager。这样控件所在的对话框就能收到对应该事件的消息。
下面举个例子,让CHorizontalLayoutUI响应鼠标进入事件,效果如下:
第一步:自定义新控件,继承CHorizontalLayoutUI
class CHorizontalLayoutUIEx : public CHorizontalLayoutUI
{
public:
virtual void DoEvent(TEventUI& event); //覆盖处理UI事件的虚函数
const static CDuiString controlLabel;
};
第二步:实现DoEvent()函数,转发UIEVENT_MOUSEENTER通知
void CHorizontalLayoutUIEx::DoEvent( TEventUI& event )
{
if( event.Type == UIEVENT_MOUSEENTER )
{
//告诉UIManager这个消息需要处理
m_pManager->SendNotify(this, DUI_MSGTYPE_MOUSEENTER);
return;
} //其他事件用父类方法处理
__super::DoEvent(event);
}
第三部:在使用该控件的界面类响应上一步通知的消息
头文件声明:
class MainDlg: public WindowImplBase
{
public:
DUI_DECLARE_MESSAGE_MAP(); //声明<消息,响应函数>映射
void OnMouseEnter(TNotifyUI& msg); //声明鼠标进入响应函数
}
cpp实现:
//定义<消息,响应函数>映射关系
DUI_BEGIN_MESSAGE_MAP(MainDlg,WindowImplBase)
DUI_ON_MSGTYPE(DUI_MSGTYPE_MOUSEENTER,OnMouseEnter)
DUI_END_MESSAGE_MAP() //鼠标进入响应函数实现
void MainDlg::OnMouseEnter( TNotifyUI& msg )
{
CDuiString controlName = msg.pSender->GetName();
if ( controlName == _T("optALayout") || controlName == _T("optBLayout") ||
controlName == _T("optCLayout") || controlName == _T("optDLayout"))
{
CHorizontalLayoutUI* layout = dynamic_cast<CHorizontalLayoutUI*>(msg.pSender);
layout->SetBorderColor(0xFF58A1CC); //设置描边颜色
layout->SetBorderSize(); //设置描边宽度
CControlUI* deleteBtn = layout->FindSubControl(_T("delete"));
deleteBtn->SetVisible(true);
}
}
Duilib自定义控件响应指定命令(转载)的更多相关文章
- MongoDB整理笔记の指定命令和指定文件
MongoDB shell 不仅仅是一个交互式的shell,它也支持执行指定javascript 文件,也支持执行指定的命令片断.有了这个特性,就可以将MongoDB 与linux shell 完美结 ...
- type---显示指定命令的类型
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令. 命令类型: alias:别名. keyword:关键字,Shell保留字. function:函数,Shell函数. bui ...
- Windows应急响应和系统加固(2)——Windows应急响应的命令使用和安全检查分析
Windows应急响应的命令使用和安全检查分析 1.获取IP地址: ·ipconfig /all,获取Windows主机IP地址信息: ·ipconfig /release,释放网络IP位置: ·ip ...
- dig命令(转载)
dig命令使用大全(linux上域名查询) 可以这样说,翻译本篇文档的过程就是我重新学习DNS的过程,dig命令可以帮助我们学习DNS的原理,配置,以及其查询过程.以前使用dig仅仅是查询一下A记录或 ...
- HTTP请求头与响应头(转载)
欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/400503 ...
- git常用命令(转载自用)
转载自 阮一峰博客: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一个码农博客: http://blog.gitor.org ...
- rsync同步常用命令[转载]
转载:http://blog.csdn.net/niushuai666/article/details/16880061 如果你是一位运维工程师,你很可能会面对几十台.几百台甚至上千台服务器,除了批量 ...
- mongo的常用命令--转载
转载liyonghui的博文,出处 http://www.cnblogs.com/liyonghui/p/mongodb.html 博主写的特别好,对于我这个新手帮了大忙了,还将mongo和mysq ...
- linux常用命令--转载
转载自: https://www.cnblogs.com/Qsunshine/p/10402179.html 常用指令 ls 显示文件或目录 -l列出文件详细信息l(list) -a列出当前目录下所有 ...
随机推荐
- sql over开窗函数,
sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...
- Java实现找出数组中重复次数最多的元素以及个数
/**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[ ...
- MyEclipse安装插件的三种方法和使用心得
本文讲解MyEclipse(MyEclipse10)的三种方法,以TestNG为例 Eclipse update site URL: http://beust.com/eclipse. 一.通过My ...
- YII2 Activedataprovider 类分页的使用
下面以管理员列表为例说明Activedataprovider分页的具体使用 1.控制器中 public function actionIndex(){ $model=new Admin(); $dat ...
- wc之上传图片
wc上传图片:以上传头像为例 1.找到views/default/account/settings/profile.tpl.htm中 init_avatar_uploader($('#avatar_u ...
- 【NOIP模拟赛】秦时明月
秦时明月 (sword.cpp/c/pas) [问题描述] 卫庄与盖聂又要论剑了,因为渊虹和鲨齿都是天下名剑,论剑容易互相损伤,太过可惜,于是两位换了两把木剑.因为木剑质地不匀,剑的每一段都有一个 ...
- xcode简介
Xcode 是苹果公司开发的编程软件,是开发人员建立OS X 和 iOS 应用程序的最快捷方式.Xcode 具有统一的用户界面设计,编码.测试.调试都在一个简单的窗口内完成. Xcode前身是继承自N ...
- QTP常用功能
1.QTP录制过程的截图 查看录制脚本过程中QTP的截图可以在QTP中查找,在关键字视图中点击每一步都对应一个截图 2.在关键字视图中为测试步骤添加注释 在关键字视图中表格列头中单击鼠标右键,选择 ...
- 一个基于和围绕Docker生态环境构建的早期项目列表
https://blog.docker.com/2013/07/docker-projects-from-the-docker-community/
- new和malloc的区别
1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符 2.new出来的指针是直接带类型信息的,而malloc返回的都是void*指针. 3.new 建立的是一个 ...