转载: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 实现开关按钮的更多相关文章

  1. DUILIB入门使用说明整理

    整理自博客上对DUILIB的操作使用的博客文章 一.DuiLib操作入门 1.DuiLib入门简明教程 -- 前言 2.DuiLib入门简明教程 -- VS环境配置 3.DuiLib入门简明教程 -- ...

  2. Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

    在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...

  3. Duilib源码分析(六)整体流程

    在<Duilib源码分析(一)整体框架>.<Duilib源码分析(二)控件构造器—CDialogBuilder>以及<Duilib源码分析(三)XML解析器—CMarku ...

  4. Duilib源码分析(五)UI布局—Layout与各子控件

    接下来,继续分析duilib之UI布局Layout,目前提供的布局有:VerticalLayout.HorizontalLayout.TileLayout.TabLayout.ChildLayout分 ...

  5. Duilib源码分析(四)绘制管理器—CPaintManagerUI

    接下来,分析uilib.h中的UIManager.h,在正式分析CPaintManagerUI前先了解前面的一些宏.结构: 枚举类型EVENTTYPE_UI:定义了UIManager.h中事件通告类型 ...

  6. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)

    接下来,我们将继续分析UIlib.h文件中其他的文件, UIContainer.h, UIRender.h, WinImplBase.h, UIManager.h,以及其他布局.控件等: 1. UIR ...

  7. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备一)

    上节中提到在遍历创建控件树后,执行了以下操作:      1. CDialogBuilder构建各控件对象并形成控件树,并返回第一个控件对象pRoot:     2. m_pm.AttachDialo ...

  8. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  9. Duilib源码分析(一)整体框架

    Duilib界面库是一款由杭州月牙儿网络技术有限公司开发的界面开源库,以viksoe项目下的UiLib库的基础上开发(此后也将对UiLib库进行源码分析):通过XML布局界面,将用户界面和处理逻辑彻底 ...

随机推荐

  1. Spring Boot中的AutoConfiguation核心注解

    import org.springframework.boot.autoconfigure.condition.*; @ConditionalOnBean // 当容器中有指定bean的条件下 @Co ...

  2. django model field validator 设置

    转自:http://blog.csdn.net/cwjcwj520/article/details/17330845 例子为想在创建用户名的时候验证输入字符是否有效,并且插入了even_field为C ...

  3. java内部类作用

    推荐一. 定义 放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围 ...

  4. EControl平台测试向生产版本工程切换说明

    第一步,备份生产环境版本,假设生产环境版本工程名为SEHEControl,记录版本说明第二部,拷贝测试版本到新文件夹,假设测试版本工程名为SEHEControlTest第三步,进入工程文件夹,修改SL ...

  5. openssl配置

    1.update openssl yum update openssl 2.修改openssl配置 vim /etc/ssh/sshd_config RSAAuthentication yesPubk ...

  6. ChannelInitializer: 每个channel都new ChannelHandle

    State management 1.业务状态管理-是否登录 A ChannelHandler often needs to store some stateful information. The ...

  7. Java List <T> T[] toArray(T[] a) implementation

    Like the toArray() method, this method acts as bridge between array-based and collection-based APIs. ...

  8. 十天精通CSS3(5)

    background-origin 设置元素背景图片的原始起始位置. 语法: background-origin : border-box | padding-box | content-box; 参 ...

  9. 加密货币 (Cryptocurrency) 市值 (market capitalization) 列表

    https://coinmarketcap.com/all/views/all/ ico 列表 https://www.icoalert.com/?q=&is_v=1 https://www. ...

  10. Spark Sort Based Shuffle内存分析

    分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述.肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章. 前言 借用和董神的一段对话说下背景: ...