转载: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. java读properties的通用类,兼容linux和windows

    package util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; / ...

  2. Android 利用Service实现下载网络图片至sdk卡

    package com.example.myapp5; import android.app.Activity; import android.content.Intent; import andro ...

  3. EBS R12版 GL追溯到各个模块

    应收.应付.收款.付款等单据都可以生成ERP的日记帐,那么这些模块的关系是如何关联的呢,我们将会解决这个问题. 各个模块与总帐模块的关系,主要是通过子分类帐来进行关联的. 下面的SQL就是总帐与子分类 ...

  4. 动态时间规整(DTW) 转载

    Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较广,主要是在模板匹 ...

  5. DataGridView 些许事件测试

    原始设计需求:当单元格内容是空白时,鼠标进入之后,显示一些数据 直观的第一感觉必然是用CellClick,细想,如果用户不用鼠标,直接按Tab键切换单元格呢?又或者,用户直接双击涅~ 主要测试的是:  ...

  6. C#调用opencv

    最经做一个项目,底层调用openCV编写的图像处理程序,用户界面采用C#编写. 于是学习了相关技术,总结如下: C#编写的是托管代码,编译生成微软中间语言,而普通C++代码则编译生成本地机器码,这两种 ...

  7. 161027、Java 中的 12 大要素及其他因素

    对于许多人来说,"原生云"和"应用程序的12要素"是同义词.本文的目的是说有很多的原生云只坚持了最初的12个因素.在大多数情况下,Java 能胜任这一任务.在本 ...

  8. svn使用相关问题:eclipse插件,加锁,解锁,偷锁,更新不了,记住密码

    svn使用相关问题:eclipse插件,加锁,解锁,偷锁,更新不了,记住密码 获取锁的时候可以看下 是谁锁住了,让对方提交解锁,如果是给离职人员锁住需要使用偷锁的方式先解锁再提交偷锁处理办法:选中该文 ...

  9. alias function varibales in Linux/GNU and Mac alias命令细说

    细说,在古文言中是”奸细佞臣的话“,现如今成了”详细说明“的缩略. alias是MS-DOC中cmds中doskey的counterpart,是”别名“或者”化名“的意思 alias强大之处在于可以化 ...

  10. 【原创】JDK动态代理,此次之后,永生难忘。

    动态代理,这个词在Java的世界里面经常被提起,尤其是对于部分(这里强调“部分”二字,因为有做了一两年就成大神的,实力强的令人发指,这类人无疑是非常懂动态代理这点小伎俩的)做了一两年新人来说,总是摸不 ...