转载: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自定义控件响应指定命令(转载)的更多相关文章

  1. MongoDB整理笔记の指定命令和指定文件

    MongoDB shell 不仅仅是一个交互式的shell,它也支持执行指定javascript 文件,也支持执行指定的命令片断.有了这个特性,就可以将MongoDB 与linux shell 完美结 ...

  2. type---显示指定命令的类型

    type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令. 命令类型: alias:别名. keyword:关键字,Shell保留字. function:函数,Shell函数. bui ...

  3. Windows应急响应和系统加固(2)——Windows应急响应的命令使用和安全检查分析

    Windows应急响应的命令使用和安全检查分析 1.获取IP地址: ·ipconfig /all,获取Windows主机IP地址信息: ·ipconfig /release,释放网络IP位置: ·ip ...

  4. dig命令(转载)

    dig命令使用大全(linux上域名查询) 可以这样说,翻译本篇文档的过程就是我重新学习DNS的过程,dig命令可以帮助我们学习DNS的原理,配置,以及其查询过程.以前使用dig仅仅是查询一下A记录或 ...

  5. HTTP请求头与响应头(转载)

    欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/400503 ...

  6. git常用命令(转载自用)

    转载自 阮一峰博客: http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 一个码农博客: http://blog.gitor.org ...

  7. rsync同步常用命令[转载]

    转载:http://blog.csdn.net/niushuai666/article/details/16880061 如果你是一位运维工程师,你很可能会面对几十台.几百台甚至上千台服务器,除了批量 ...

  8. mongo的常用命令--转载

    转载liyonghui的博文,出处  http://www.cnblogs.com/liyonghui/p/mongodb.html 博主写的特别好,对于我这个新手帮了大忙了,还将mongo和mysq ...

  9. linux常用命令--转载

    转载自: https://www.cnblogs.com/Qsunshine/p/10402179.html 常用指令 ls 显示文件或目录 -l列出文件详细信息l(list) -a列出当前目录下所有 ...

随机推荐

  1. sql over开窗函数,

    sql over开窗函数, 1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作.而且利用over子句的分组效率比group by子句的效率更高. 2.在订单 ...

  2. Java实现找出数组中重复次数最多的元素以及个数

    /**数组中元素重复最多的数 * @param array * @author shaobn * @param array */ public static void getMethod_4(int[ ...

  3. MyEclipse安装插件的三种方法和使用心得

    本文讲解MyEclipse(MyEclipse10)的三种方法,以TestNG为例 Eclipse update site URL:  http://beust.com/eclipse. 一.通过My ...

  4. YII2 Activedataprovider 类分页的使用

    下面以管理员列表为例说明Activedataprovider分页的具体使用 1.控制器中 public function actionIndex(){ $model=new Admin(); $dat ...

  5. wc之上传图片

    wc上传图片:以上传头像为例 1.找到views/default/account/settings/profile.tpl.htm中 init_avatar_uploader($('#avatar_u ...

  6. 【NOIP模拟赛】秦时明月

    秦时明月 (sword.cpp/c/pas) [问题描述]   卫庄与盖聂又要论剑了,因为渊虹和鲨齿都是天下名剑,论剑容易互相损伤,太过可惜,于是两位换了两把木剑.因为木剑质地不匀,剑的每一段都有一个 ...

  7. xcode简介

    Xcode 是苹果公司开发的编程软件,是开发人员建立OS X 和 iOS 应用程序的最快捷方式.Xcode 具有统一的用户界面设计,编码.测试.调试都在一个简单的窗口内完成. Xcode前身是继承自N ...

  8. QTP常用功能

    1.QTP录制过程的截图 查看录制脚本过程中QTP的截图可以在QTP中查找,在关键字视图中点击每一步都对应一个截图   2.在关键字视图中为测试步骤添加注释 在关键字视图中表格列头中单击鼠标右键,选择 ...

  9. 一个基于和围绕Docker生态环境构建的早期项目列表

    https://blog.docker.com/2013/07/docker-projects-from-the-docker-community/

  10. new和malloc的区别

    1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符 2.new出来的指针是直接带类型信息的,而malloc返回的都是void*指针. 3.new 建立的是一个 ...