在使用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. C++ — 后缀表达式转表达式树

    2018-07-21 16:57:26 update 建立表达式树的基本思路:方法类似由下而上建立堆的思想,所以时间复杂度为O(n),这样算法就会变得很简单,只用考虑处理需要入栈的节点和栈中的节点即可 ...

  2. [Qt5] 使用Qt设计器绘制主窗口

    实践代码: git clone https://github.com/dilexliu/learn_qt5.git Step1: Qt设计器绘制窗口 保存会得到一个文件: mainwindow.ui ...

  3. IDEA中打war 包

    把war 放入tomcat 的 webapps 目录下,重启tomcat即可自动解压war包跑起来 (最好是,解压完成后,关闭tomcat,把war包拷贝出去,再启动,不然每次启动tomcat都会自动 ...

  4. IDEA导入项目后,导入artifacts 方法 以及 Spring的配置文件找不到的解决方法

    我们一般选择 open 项目,如果没有artifacts 的添加选项,我们就要选择 import 项目. 如果没有artifacts ,项目下面会有错误提示,点击错误提示Fix,设置里面导入artif ...

  5. 118、Java中String类之取字符串长度

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

  6. RF之变量的共享使用与python测试库-5

    RF申明变量: 首先我们要创建Variables表 *** Settings *** ${LoginUrl}      http://cloud.innovpowerf.com/Account/Log ...

  7. 「Luogu P2845 [USACO15DEC]Switching on the Lights 开关灯」

    USACO的又一道搜索题 前置芝士 BFS(DFS)遍历:用来搜索.(因为BFS好写,本文以BFS为准还不是因为作者懒) 链式前向星,本题的数据比较水,所以邻接表也可以写,但是链式前向星它不香吗. 具 ...

  8. MariaDB——SQL语句分类汇总

    常用SQL语句汇总 SQL语句在所有的关系型数据库中都是通用的,算起来sql语句也是一门语言,只不过这门语言的主要操作对象是关系型的数据库,其中最常用的还是查询相关的语句. sql语句主要分为: DQ ...

  9. updatexml()报错注入

    首先了解下updatexml()函数 UPDATEXML (XML_document, XPath_string, new_value); 第一个参数:XML_document是String格式,为X ...

  10. 「SCOI2010」连续攻击游戏

    传送门 Luogu 解题思路 二分图匹配,关键是建图. 如果我们naive地直接把每个武器的两个属性分为两部建图的话,显然是跑不了的. 我们考虑把每一个武器的属性向它连边:\(a_i \rightar ...