今天打算給自己寫的工程上點色。但是在給按鈕上色的時候出了點問題。在網上找的方法基本上都不管用。說得跟真的一樣,各種OnCtrlColor()和OnEraseBkground(),各種技術帝的方法看起來都很厲害,但是都不管用。
真正有用的辦法是自定義button,才能實現按鈕顏色。但是這個辦法不免有些復雜,我這麼懶的人,既不想為這麼個小功能去重寫一個類,也不想使用第三方的按鈕類,所以只能另辟蹊徑了。
所幸在codeproject上又找到了一個大神寫的教程。使用CMFCButton便可以實現這種功能。
接下來簡單介紹一下CMFCButton的用法。建立一個基於對話框的工程MFCButtonTest。在對話框編輯界面中,拖入一個button控件,改資源ID號為IDC_BUTTON_TEST。
接下來,在CMFCButtonTestDlg::OnInitDialog()中添加如下代碼:
- CMFCButton * button = new CMFCButton;
- button->Create(_T("Test Button"),
- WS_VISIBLE,
- CRect(5, 5, 80, 50),
- this,
- IDC_BUTTON_TEST);
注意!!這個行為是錯誤的,會有內存洩漏,只為寫個例子,真實工程中不允許這種寫法。
好了,運行一下吧,會看到屏幕上出現了兩個按鈕。
但是不用擔心,TestButton就是Button1,Button1就是TestButton,他們共享同一個資源號。也可以說TestButton其實是Button1的“影分身”,在對話框編輯界面中是看不到的。那麼解決方案就簡單啦,在對話框編輯界面中把Button1的Visible屬性設為False便可以了。
Tips: 這樣一來,可以創建多個CMFCButton,都使用同一個ID號,那麼他們可以分散在世界各地,而且還能運行同一段代碼,真夠帥氣!
再次運行。
好,接下來進入重頭戲。CMFCButton的可定制性非常高,包括背景顏色、圖片、按鈕字體、字體顏色、字體高亮顏色、鼠標指針。。。等等等等,是個非常討喜的類。
接著就來實驗一下吧
還是CMFCButtonTestDlg::OnInitDialog(),繼續添加一些方法。並且添加一個按鈕用來顯示圖片背景。既然有圖片,就導入一個BMP吧,ID號設為IDB_BITMAP1。調整一下窗口大小,讓按鈕完整地顯示出來。
- CMFCButton * button = new CMFCButton;
- button->Create(_T("Test Button"),
- WS_VISIBLE,
- CRect(5, 5, 80, 50),
- this,
- IDC_BUTTON_TEST);
- // 更改文字
- button->SetWindowTextW(_T("強制更改"));
- // 更改背景顏色
- button->SetFaceColor(RGB(153, 217, 234));
- // 更改字體顏色
- button->SetTextColor(RGB(255, 255, 255));
- // 更改高亮顏色
- button->SetTextHotColor(RGB(63, 72, 204));
- // 更改位置
- button->MoveWindow(50, 50, 100, 70);
- // 鼠標經過時變成手勢
- button->SetMouseCursorHand();
- // 工具提示
- button->SetTooltip(_T("俺是提示"));
- CMFCButton * button1 = new CMFCButton;
- button1->Create(_T("Test Button"),
- WS_VISIBLE,
- CRect(160, 15, 280, 150),
- this,
- IDC_BUTTON_TEST);
- // 加載圖片
- button1->SetImage(IDB_BITMAP1);
於是,一個難看的按鈕和一個更難看的按鈕就此誕生了~
鼠標經過時會變成手型,而且平時是白色的字,鼠標經過時會變成圖中的藍色。
簡單吧?vs2010中應該還有很多可以造福程序員的類,以後要多多挖掘。
本文出自 “正面旺得福反面泰瑞寶” 博客,請務必保留此出處http://serious.blog.51cto.com/242085/866172