在使用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. 编写跨平台Java程序注意事项

    使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的,那么如何才能编写 ...

  2. Windows下ARP协议的工作原理简介

       ARP协议(Address Resolve Protocol,地址解析协议)工作在TCP/IP协议的第二层-数据链路层,用于将IP地址转换为网络接口的硬件地址(媒体访问控制地址,即MAC地址). ...

  3. sqlplus导入sql,dmp导入导出

    1.创建表空间及用户名 1).用Oracle的EM做数据库的管理(表空间.用户及授权为例子) https://blog.csdn.net/anderslu/article/details/566701 ...

  4. java并发初探CountDownLatch

    java并发初探CountDownLatch CountDownLatch是同步工具类能够允许一个或者多个线程等待直到其他线程完成操作. 当前前程A调用CountDownLatch的await方法进入 ...

  5. jumperserver安装

    参照官网地址进行安装 https://jumpserver.readthedocs.io/zh/master/setup_by_centos.html 在安装的时候踩了一个坑 Python 模块安装中 ...

  6. Address localhost:1099 is already in use(IDEA启动Tomcat报错1099 is already in use)

    IDEA中启动Tomcat报错,Error running Tomcat7.0.52: Address localhost:1099 is already in use 或者是 java.rmi.se ...

  7. Day3-D-Protecting the Flowers POJ3262

    Farmer John went to cut some wood and left N (2 ≤ N ≤ 100,000) cows eating the grass, as usual. When ...

  8. 被动信息收集-其他收集目标信息的途径:cupp、 recon-ng

    除了google等搜索收集,还有其他途径进行信息收集,其中就包括用命令行或集成的软件.框架进行搜集信息. 1.先举例几个简单的命令: 其实也会是调用搜索引擎,如谷歌必应等,需要翻墙,可以用proxyc ...

  9. 「CF55D」Beautiful numbers

    传送门 Luogu 解题思路 毒瘤数位DP,发现一个前缀我们只需要记录它对 \(\operatorname{lcm}(1,2,3,\cdots,9)=2520\) 取模的值即可,所以我们在 DP 时记 ...

  10. MyEclipse 8.6.1 制作绿色版

    我们先在这个目录下新建一个文件: MyEclipse 10.6.bat , 文件内容如下: start eclipse\eclipse.exe -vm jre\bin\javaw.exe 接下来只需要 ...