如何更改MFC按鈕的背景色

今天打算給自己寫的工程上點色。但是在給按鈕上色的時候出了點問題。在網上找的方法基本上都不管用。說得跟真的一樣,各種OnCtrlColor()和OnEraseBkground(),各種技術帝的方法看起來都很厲害,但是都不管用。

真正有用的辦法是自定義button,才能實現按鈕顏色。但是這個辦法不免有些複雜,我這麼懶的人,既不想爲這麼個小功能去重寫一個類,也不想使用第三方的按鈕類,所以只能另闢蹊徑了。

所幸在codeproject上又找到了一個大神寫的教程。使用CMFCButton便可以實現這種功能。

接下來簡單介紹一下CMFCButton的用法。建立一個基於對話框的工程MFCButtonTest。在對話框編輯界面中,拖入一個button控件,改資源ID號爲IDC_BUTTON_TEST。

接下來,在CMFCButtonTestDlg::OnInitDialog()中添加如下代碼:

  1. CMFCButton * button = new CMFCButton; 
  2. button->Create(_T("Test Button"), 
  3. WS_VISIBLE, 
  4. CRect(5, 5, 80, 50), 
  5. this
  6. IDC_BUTTON_TEST); 

注意!!這個行爲是錯誤的,會有內存泄漏,只爲寫個例子,真實工程中不允許這種寫法。

好了,運行一下吧,會看到屏幕上出現了兩個按鈕。

但是不用擔心,TestButton就是Button1,Button1就是TestButton,他們共享同一個資源號。也可以說TestButton其實是Button1的“影分身”,在對話框編輯界面中是看不到的。那麼解決方案就簡單啦,在對話框編輯界面中把Button1的Visible屬性設爲False便可以了。

Tips: 這樣一來,可以創建多個CMFCButton,都使用同一個ID號,那麼他們可以分散在世界各地,而且還能運行同一段代碼,真夠帥氣!

再次運行。

好,接下來進入重頭戲。CMFCButton的可定製性非常高,包括背景顏色、圖片、按鈕字體、字體顏色、字體高亮顏色、鼠標指針。。。等等等等,是個非常討喜的類。

接着就來實驗一下吧

還是CMFCButtonTestDlg::OnInitDialog(),繼續添加一些方法。並且添加一個按鈕用來顯示圖片背景。既然有圖片,就導入一個BMP吧,ID號設爲IDB_BITMAP1。調整一下窗口大小,讓按鈕完整地顯示出來。

  1. CMFCButton * button = new CMFCButton; 
  2. button->Create(_T("Test Button"), 
  3. WS_VISIBLE, 
  4. CRect(5, 5, 80, 50), 
  5. this
  6. IDC_BUTTON_TEST); 
  7. // 更改文字 
  8. button->SetWindowTextW(_T("強制更改")); 
  9. // 更改背景顏色 
  10. button->SetFaceColor(RGB(153, 217, 234)); 
  11. // 更改字體顏色 
  12. button->SetTextColor(RGB(255, 255, 255)); 
  13. // 更改高亮顏色 
  14. button->SetTextHotColor(RGB(63, 72, 204)); 
  15. // 更改位置 
  16. button->MoveWindow(50, 50, 100, 70); 
  17. // 鼠標經過時變成手勢 
  18. button->SetMouseCursorHand(); 
  19. // 工具提示 
  20. button->SetTooltip(_T("俺是提示")); 
  21.  
  22. CMFCButton * button1 = new CMFCButton; 
  23. button1->Create(_T("Test Button"), 
  24. WS_VISIBLE, 
  25. CRect(160, 15, 280, 150), 
  26. this
  27. IDC_BUTTON_TEST); 
  28. // 加載圖片 
  29. button1->SetImage(IDB_BITMAP1); 

於是,一個難看的按鈕和一個更難看的按鈕就此誕生了~

鼠標經過時會變成手型,而且平時是白色的字,鼠標經過時會變成圖中的藍色。

簡單吧?vs2010中應該還有很多可以造福程序員的類,以後要多多挖掘。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章