在使用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. Swift-如何快速学习Swift

    关于本文: 1.说明本文写作的目的 2.整理了Swift的基本语法树 3.看图作文 一.写作目的 昨天看了一个知识专栏,作者讲述的是“如何研究性的学习”.整个课程1个小时9分钟,花了我19块人民币.其 ...

  2. 三 HTML框架标签

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. Laradock 如何通过 ssh 方式连接到 workspace

    用 docker-compose exec workspace bash 方式可以进入容器,但是还是在 xshell 终端连接比较方便.   在网上也没找到方法,其实可以通过密钥的方式连接.记录一下仅 ...

  4. topthink/think-swoole 扩展包的使用 之 WebSocket

    嗯~ o(* ̄▽ ̄*)o,没错欢迎收看继续爬坑系列233...话不多说直接开撸 今天的题材是websocket,没有特殊说明的话默认环境都和此系列第一篇文章中申明一致,此后不再赘述. websocke ...

  5. 前端Cannot read property 'disabled' of null 问题解决

    就是在项目中,控制台一直在报这个错,一直没找到是什么问题, 后来经过一番排查,发现是 因为在页面中使用了el-dropdown,但是在这个标签里面没有设置它的子元素,所以会报错,解决的方法就是在el- ...

  6. tomcat点击startup.bat出现闪退,启动不成功的解决办法

    问题描述:tomcat点击startup.bat出现命令行闪退的情况 打开startup.bat,在第一行加入 SET JAVA_HOME=D:\jdk\jdk1.8.0_121[jdk路径] SET ...

  7. 如何知道某个ACTIVITY是否在前台?

    本文链接:http://zengrong.net/post/1680.htm 有一个Android应用包含包含一个后台程序,该程序会定期连接服务器来实现自定义信息的推送.但是,当这个应用处于前台的时候 ...

  8. Day1-XDoj-1062

    题目描述 一天,lw梦见自己在打dota,然而对面是一个加强过的卡尔!于是,他每次都被n个技能瞬间秒杀.愤怒的lw决定买BKB,来加强生存力. 由于加强过的卡尔是电脑操作的,他每次看见lw时,只会以1 ...

  9. 097、Java中String类之修改字符串对象引用

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  10. NFS实战

    博客实践: (1) nfs server导出/data/application/web,在目录中提供wordpress; (2) nfs client挂载nfs server导出的文件系统至/var/ ...