本文是基於對話框的html
博文基於 無幻 的博文爲基礎寫的 http://blog.csdn.net/akof1314/article/details/4951836c++
筆者使用mfc撐死2個星期,不過這是有c++基礎的前提下接觸mfc,昨天看到了網上對qt creator的評論,感受好高大上,回去試了一下後發現,qt須要mfc的基礎,如果直接接觸qt的話會比較難,畢竟mfc是在vs的平臺下,你們學起來會比較順手。函數
回到正題,今天研究了下怎麼使用mfc中的位圖按鍵,發現實現方法挺多,可是對於小白來講,不少做者認爲簡單的都會略過,恰巧那些簡單的就是我不會的,結果又看不懂。除了mfc自有的CBitmapButton外,在網上還看到有關於CButtonST的使用,應該是會比CBitmapButton簡單,筆者看的是CBitmapButton,那這裏就不講CButtonST。this
兩位csdn博主對CButtonST使用的連接:.net
DoubleLi: http://www.cnblogs.com/lidabo/archive/2012/12/17/2821122.html設計
wqvbjhc: http://blog.csdn.net/wqvbjhc/article/details/125806693d
首先 會用到如下CBitmapButton類的函數htm
LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS,IDB_DISABLE);blog
//載入圖片 IDB_UP, IDB_DOWN, IDB_FOCUS,IDB_DISABLE 這四個均爲bitmapID圖片
BOOL LoadBitmaps( LPCTSTR lpszBitmapResource, LPCTSTR lpszBitmapResourceSel = NULL, LPCTSTR lpszBitmapResourceFocus = NULL, LPCTSTR lpszBitmapResourceDisabled = NULL );
bitmap的載入
回到資源視圖就能夠看到 資源視圖打開的方法:視圖-》其餘窗口-》資源視圖
SubclassDlgItem(按鈕ID, this);//關聯按鈕
SizeToContent();//讓按鈕隨圖片大小變化
GetDlgItem(按鈕ID)->EnableWindow(FALSE);//開啓按鈕的禁止狀態
如今開始作
1.在對話框出拖入一個按鈕,,其ID爲IDC_BUTTON1
2.設置按鈕屬性中的Owner Draw爲TRUE
3.在::OnInitDialog();前添加 CBitmapButton m_btnX1;//必須放在函數外面才能正常實現
4.導入按鈕位圖,這裏四幅圖大小要一致,如下是四種狀體的按鈕,若讀者要實驗此次的設計的話,能夠右鍵另存爲,而後用「畫圖」把png格式的另存爲bmp格式的。在資源視圖,右鍵「添加資源」,「導入」如下圖片:
5.初始化工做,在對話框的OnInitDialog()函數裏面添加如下代碼:
m_btnX1.LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS,IDB_DISABLE);//
// 也能夠只加一個ID資源;
m_btnX1.SubclassDlgItem(IDC_BUTTON_TEST2, this);
m_btnX1.SizeToContent();
到這裏已經完成了位圖按鈕的實現,編譯運行能夠看到結果。
其實這個時候你能看到後三幅圖的的效果,爲什disable的看不到,是由於這個禁止的狀態你沒有打開,打開須要
GetDlgItem(按鈕ID)->EnableWindow(FALSE); //爲false是是開啓禁止狀態,爲true時則是關閉狀態
這時候四個圖標你都能看到了。
若是你想作鼠標移動到按鈕上,按鈕會變其餘圖案的效果,請看 無幻 http://blog.csdn.net/akof1314/article/details/4951836/;
本文用到的資料: 只想說一句 csdn太強大了。
http://blog.csdn.net/leixiaohua1020/article/details/12753967 http://blog.csdn.net/akof1314/article/details/4951836/ http://bbs.csdn.net/topics/100184465 https://msdn.microsoft.com/en-us/library/6y6acs49(v=vs.120).aspx