在編程中,經常要用到按鈕控件,大部分情況下,文字按鈕就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);
這種方法按鈕也會自動調整為和位圖一樣大小。