Duilib 实现开关按钮
转载:http://blog.csdn.net/wuan584974722/article/details/25045737
我们在做MFC程序时候经常会一个切换式的按钮,之前我的做法是利用buttion类的一个SetState()函数,但是返现效果不佳。而且容易出现点1按钮,焦点跑到另外一个按钮上去了 。后来看到别人一个程序。我发现他的切换效果做的很好 ,经过看代码发现,他用的控件根本不是buttion控件而是check box 控件。我就很奇怪,如何将check box变成了一个按钮的,经查看代码发现,原来是他将控件的属性------push lisk (我的翻译是按下去像 纯字面理解)设置成true 如图
他就会变成一个按钮形状了,这时候 你给他添加控件变量和控件变量的值,在程序里面函数DoDataExchange(CDataExchange* pDX)中会生成DDX_Control(pDX, IDC_BUTTON1, m_btn_AT);
DDX_Check(pDX, IDC_BUTTON1,
m_Check_AT);在头文件中会定义两个连个变量CButtion m_btn_AT;和BOOL m_Check_AT,
可以修改CButtion
为你重新写的类。然后我们添加按钮的消息响应函数:在消息响应函数中要添加函数UpdataData(true);这个函数会调用DoDataExchange(CDataExchange* pDX);
void
C按钮凹凸效果Dlg::OnBnClickedCheck1()
{
UpdateData(TRUE);
if(m_Checked)
{
m_btn_check.SetWindowText(L"1状态
(开)");
m_btn_check.SetBitmaps(IDB_BITMAP1,RGB(255,255,255));
}
else
{
m_btn_check.SetWindowText(L"0状态
(关)");
m_btn_check.SetBitmaps(IDB_BITMAP1,RGB(255,255,255));
}
}
参考上面例子,其实在Duilib中也是用CheckBox控件来实现开关按钮,代码都不需要实现,直接在xml中设置就行了
<CheckBox name="chkOption" width="143" height="90" float="10,0,0,0" normalimage="file='switchbutton.png' source='0,0,143,91'" selectedimage="file='switchbutton.png' source='0,182,143,273'"/>
代码实现:
CCheckBoxUI *pCheck = new CCheckBoxUI;
pCheck->SetMaxHeight();
pCheck->SetMaxWidth();
pCheck->SetAttribute(_T("normalimage"), _T("file='image\\switchbutton.png' source='0,0,143,91'"));
pCheck->SetAttribute(_T("selectedimage"), _T("file='image\\switchbutton.png' source='0,182,143,273'"));
最后上效果:

这个背景图

Duilib 实现开关按钮的更多相关文章
- DUILIB入门使用说明整理
整理自博客上对DUILIB的操作使用的博客文章 一.DuiLib操作入门 1.DuiLib入门简明教程 -- 前言 2.DuiLib入门简明教程 -- VS环境配置 3.DuiLib入门简明教程 -- ...
- Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)
在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...
- Duilib源码分析(六)整体流程
在<Duilib源码分析(一)整体框架>.<Duilib源码分析(二)控件构造器—CDialogBuilder>以及<Duilib源码分析(三)XML解析器—CMarku ...
- Duilib源码分析(五)UI布局—Layout与各子控件
接下来,继续分析duilib之UI布局Layout,目前提供的布局有:VerticalLayout.HorizontalLayout.TileLayout.TabLayout.ChildLayout分 ...
- Duilib源码分析(四)绘制管理器—CPaintManagerUI
接下来,分析uilib.h中的UIManager.h,在正式分析CPaintManagerUI前先了解前面的一些宏.结构: 枚举类型EVENTTYPE_UI:定义了UIManager.h中事件通告类型 ...
- Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)
接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...
- Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备一)
上节中提到在遍历创建控件树后,执行了以下操作: 1. CDialogBuilder构建各控件对象并形成控件树,并返回第一个控件对象pRoot: 2. m_pm.AttachDialo ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- Duilib源码分析(一)整体框架
Duilib界面库是一款由杭州月牙儿网络技术有限公司开发的界面开源库,以viksoe项目下的UiLib库的基础上开发(此后也将对UiLib库进行源码分析):通过XML布局界面,将用户界面和处理逻辑彻底 ...
随机推荐
- bisecting k-means
总结 1.二分法 2.总体中的最值 bisecting k-means :在初始时将所有数据当成一个聚簇,然后递归地将最不紧凑的聚簇用2-means拆分为2个聚簇,直至满意
- 【Git 使用笔记】第一部分:安装git 和 使用git
第一部分:安装git(本人使用ubuntu系统) sudo apt-get install git 第二部分:基本配置 git config core.filemode false//忽略文件属性的修 ...
- 2018/04/07 每日一个Linux命令 之 logrotate
简介 日志的存在一直是 Linux 里面一个比较重要内容. 但是随着服务器运行的时间越来越长,日志越来越大.我见过一个线上项目 TP3.2 log文件有260+G的...... logrotate 也 ...
- PHP使用 zip 扩展压缩文件
在公司遇到一个问题,是使用zip打包用户的上传文件,提供集体下载. -- 第一个想法就是使用exec在Linux进行打包.但是...exec方法吧,你懂得,我不太愿意使用这个函数. -- 于是上网查找 ...
- A Simple Problem with Integers---poj3468线段树
http://poj.org/problem?id=3468 题意:有一个比较长的区间可能是100000.长度, 每个点都有一个值(值还比较大), 现在有一些操作: C a b c, 把区间a-- ...
- pycharm 使用激活补丁永久激活+汉化
提供激活补丁激活方式(推荐使用-使用期到2100年,基本永久啦) 破解补丁激活 1.下载 https://pan.baidu.com/s/1GehNMTXagUxUEted1DT-Pg 密码:6689 ...
- Python装饰器与面向切面编程(转)
add by zhj: 装饰器的作用是将代码中可以独立的功能独立出来,实现代码复用,下面那个用于统计函数运行时间的装饰器就是很好的例子,我们不用修改原有的函数和调用原有函数的地方,这遵循了开闭原则.装 ...
- 001-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-第一章 阿里巴巴集团中台战略引发的思考
1.1.阿里中台发展 组件中台可能问题:组织间业务协作.业务核心能力的沉淀.组织KPI考核等 1.2.企业信息中心发展的症结 1.烟囱式系统建设模式 独立构建独立维护 缺点:1.重复功能建设和维护带来 ...
- ASCII对照表
ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUT 32 (space) 64 @ 96 . 1 SOH 33 ! 65 A 97 a 2 ST ...
- CloudFlare防护下的破绽:寻找真实IP的几条途径
本文仅代表作者独立观点,本文提及的技术仅供安全研究和渗透测试用途 看Twitter发现CloudFlare总裁什么的最近很高调,北京.香港的跑着参加会议.发表演说什么的,CloudFlare似乎也没那 ...