在使用BUTTON过程中,有时候发现一些属性不够用,或要从新绘制BUTTON按钮,那该如何操作?其实很简单,只需要继承CButtonUI类就行。

创建类CMyButtonUI,继承CButtonUI,然后添加如下函数:

LPCTSTR GetClass() const;
LPVOID GetInterface(LPCTSTR pstrName);
virtual void SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue );
int GetMyAttr();
void SetMyAttr(int nData);

其中,重写SetAttribute函数,是为了添加新属性的操作,所有函数代码如下:

    CMyButtonUI::CMyButtonUI(void)
{
} CMyButtonUI::~CMyButtonUI(void)
{
} LPCTSTR CMyButtonUI::GetClass() const
{
return _T("IRButtonUI");
} LPVOID CMyButtonUI::GetInterface( LPCTSTR pstrName )
{
if( _tcscmp(pstrName, _T("MyButton")) == ) return static_cast<CMyButtonUI*>(this);
return CButtonUI::GetInterface(pstrName);
} void CMyButtonUI::SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue )
{
//throw std::exception("The method or operation is not implemented.");
if( _tcscmp(pstrName, _T("my_attr")) == )
{
LPTSTR pstr = NULL;
m_nMyAttr = _tcstol(pstrValue, &pstr, );
}
CButtonUI::SetAttribute(pstrName, pstrValue);
} int CMyButtonUI::GetMyAttr()
{
return m_nMyAttr ;
} void CMyButtonUI::SetMyAttr(int nData)
{
m_nMyAttr = nData;
}

其中my_attr为自己添加的属性,添加CButtonUI::SetAttribute(pstrName, pstrValue);是为了继承原有的属性。

用法很简单,在XML中,写入如下:

< MyBurtton my_attr="100" bkcolor="#FF874523" height="30" width="30" />

在创建此控件的类函数中的CreateControl( LPCTSTR pstrClass )函数中写下如下代码:

if( == _tcsicmp(pstrClass,_T("MyBurtton")))
return newCMyButtonUI();
return NULL;

完成以上步骤,既可以处理自己创建的BUTTON。

duilib之重写BUTTON按钮的更多相关文章

  1. iOS Button按钮 热区的放大

      Apple的iOS人机交互设计指南中指出,按钮点击热区应不小于44x44pt,否则这个按钮就会让用户觉得“很难用”,因为明明点击上去了,却没有任何响应. 但我们有时做自定义Button的时候,设计 ...

  2. 5.Qt自定义Button按钮的实现

     1.编写自定义按钮 MyButton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QWidget> /** * @brief ...

  3. button 按钮,结合onclick事件,验证和提交表单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 如何在MFC界面开发中响应Button按钮的Down和Up事件

    通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...

  5. 遭遇input与button按钮背景图失效不显示的解决办法

    笔者从事网页前端代码页面工程师已有多年,作为一个网页重构人员常常会遇到一些莫名其妙的DIV+CSS(正确的说法是XHTML+CSS)在 IE.FireFox火狐. 谷歌浏览器CHROME.苹果浏览器S ...

  6. button按钮

    button按钮只加类名不加type时,点击此按钮页面会刷新

  7. Unity3D NGUI 给button按钮添加单间事件

    Unity3D中, NGUI 给button按钮添加单间事件的方法很多,在这里只给推荐一种比较常用的方法. 推荐方法:使用UIListener. 1.给button组价添加上UIListener.选择 ...

  8. iphone中button按钮显示为圆形解决

    iphone中button按钮显示为圆形解决: 添加样式: -webkit-appearance:button; 如果需要为直角: border-radius:0 在源码中添加如:style=&quo ...

  9. 【html】button按钮的一些问题

    问题: button 按钮在不设置 type 属性时,在不同的浏览器作用不一样.举个例子: html: <!doctype html> <html lang="en&quo ...

随机推荐

  1. 使用package.json安装模块

    node.js模块的安装可以使用npm安装,如下: $ npm install <Module Name> 每个项目的根目录下面,一般都需要一个package.json文件,定义了这个项目 ...

  2. 「CF1037D」Valid BFS?

    传送门 Luogu 解题思路 考虑直接模拟 \(\text{BFS}\) 的过程. 对于每一个节点的儿子,先遍历在输入序列中靠前的,判断 \(\text{BFS}\) 是否匹配即可. 细节注意事项 注 ...

  3. Android LowMemoryKiller原理分析

    copy from : http://gityuan.com/2016/09/17/android-lowmemorykiller/ frameworks/base/services/core/jav ...

  4. python面向对象之练习题2

    练习题 需求: 士兵 可以 花钱买一个AK47 士兵 可以 用开开火 士兵 可以 买弹夹 士兵 可以 上子弹 士兵 可以 给 枪 添加子弹 枪 需要弹夹和有子弹的情况下,借助士兵扣动扳机 才能开火 枪 ...

  5. 《React后台管理系统实战 :二》antd左导航:cmd批量创建子/目录、用antd进行页面布局、分离左导航为单独组件、子路由、动态写左导航、css样式相对陷阱

    一.admin页面布局及路由创建 0)cmd批量创建目录及子目录 //创建各个目录,及charts和子目录bar md home category product role user charts\b ...

  6. Hystrix熔断机制导致误报请求超时错误

    问题的过程如下: (1)前端向服务端请求往HBase插入1000条数据: (2)请求经路由网关Zuul传递给HBaseService,HBaseService执行插入操作: (3)插入操作需要的时间超 ...

  7. JS监听video视频播放时间

    采用原生时间监听element.addEventListener(event, function, useCapture) //监听播放时间 var video = document.getEleme ...

  8. vbox虚拟机vdi文件用VMware打开

    转自:https://blog.51cto.com/dahui09/1863486 方法一: 使用VirtualBox 自带的VBoxManage来进行格式转换: 1.安装VBoxManage 2.使 ...

  9. 扩展中国剩余定理 (ExCRT)

    扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...

  10. 大数据篇:DolphinScheduler-1.2.0.release安装部署

    大数据篇:DolphinScheduler-1.2.0.release安装部署 1 配置jdk #查看命令 rpm -qa | grep java #删除命令 rpm -e --nodeps xxx ...