程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 如何更改MFC按鈕的背景色

如何更改MFC按鈕的背景色

編輯:關於C語言

今天打算給自己寫的工程上點色。但是在給按鈕上色的時候出了點問題。在網上找的方法基本上都不管用。說得跟真的一樣,各種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中應該還有很多可以造福程序員的類,以後要多多挖掘。

 

本文出自 “正面旺得福反面泰瑞寶” 博客,請務必保留此出處http://serious.blog.51cto.com/242085/866172

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved