赞助

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(40);
        pCheck->SetMaxWidth(60);
        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'"));

 

最后上效果:

 

这个背景图

 

posted @ 2017-08-03 17:49  车臣  阅读(3196)  评论(0编辑  收藏  举报