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'"));

 

最后上效果:

 

這個背景圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM