CBitmapButton實現圖形按鈕


在編程中,經常要用到按鈕控件,大部分情況下,文字按鈕就OK了,但有時為了更好的效果,需要用到圖形按鈕。

在MFC中,應用CBitmapButton就可以實現圖形按鈕。CBitmapButton類繼承自CButton類。你可以為圖形按鈕指定四張圖片,分別對應按鈕的四種不同狀態:

正常顯示(Up),鼠標按下(Down),獲得焦點(Focused),不可用(Disabled)。

正常顯示(Up)狀態的圖片是必須的,其他三張圖片是可選的。

還有,按鈕的Style必須指定為BS_OWNERDRAW.。

以下是利用CBitmapButton實現圖形按鈕的實例:

第一種方法:

(一)在VC6下新建一對話框工程,在對話框界面上拉出一按鈕控件

指定按鈕的Style為Owner Draw,即程式中得BS_OWNERDRAW樣式。

利用ClassWizard為按鈕關聯CButton類變量,然后將CButton類型手動改為CBitmapButton。

(二)導入指定按鈕四種狀態的圖片

以下只導入了3張圖片,分別對應Up,Down,Focused

(三)在對話框的OnInitDialog函數中添加如下代碼

LoadBitmaps加載狀態圖片,注意順序為Up,Down,Focused,Disabled。

1 // TODO: Add extra initialization here  
2 m_btnBitmap.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED); //Disabled狀態的圖片沒有制作
3 m_btnBitmap.SizeToContent(); //調整按鈕大小為圖片大小

第二種方法:利用SubclassDlgItem

在界面中拉出一按鈕控件后,不用關聯變量,指定按鈕的Style為Owner Draw,然后同上一樣導入四張狀態圖片。創建CBitmapButton對象(注意不要創建函數的局部變量,否則在函數執行完畢時就銷毀了),最好創建為對話框的成員變量,在對話框的OnInitDialog初始化函數中用LoadBitmaps加載圖片,再利用SubclassDlgItem方法將該CBitmapButton與剛開始在界面上拉出的控件關聯。按鈕控件自動調整為和圖片一樣大小。

代碼如下:

1 m_btnBitmap002.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);  
2 m_btnBitmap002.SubclassDlgItem(IDC_BTN_TESTAUTO, this);
3 //CBitmapButton test; //不可這樣定義局部變量再關聯
4 //test.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUSED);
5 //test.SubclassDlgItem(IDC_BTN_TESTAUTO, this);

第三種方法:應用CBitmapButton的AutoLoad方法自動為按鈕加載圖片

BOOL AutoLoad(UINT nID, CWnd* pParent);

我們不用指定圖片的ID,那么程序是采取怎樣的規則去加載圖片的呢?

規則:如果按鈕控件的Caption為Test,則四張位圖的ID應分別為“TestU”,“TestD”,“TestF”,“TestX”,分別對應Up,Down,Focused,Disabled狀態。注意:""也是ID的一部分。

所以步驟為:
(一)在對話框中拉出按鈕控件,Caption改為Test,指定按鈕的Style為Owner Draw。

(二)定義對話框的成員變量CBitmapButton   m_btnBitmap003;

(三)導入四張狀態位圖,ID分別改為“TestU”,“TestD”,“TestF”,“TestX”。

(四)在對話框的OnInitDialog中調用AutoLoad方法

1 m_btnBitmap003.AutoLoad(IDC_BTNTEST, this);  

這種方法按鈕也會自動調整為和位圖一樣大小。






免責聲明!

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



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