MFC 原生 CButton 修改背景色極其繁瑣,網上流傳的 OnCtlColor、OnEraseBkgnd 重寫大多失效。VS2010 引入的 CMFCButton 原生支援豐富視覺定製,本文演示動態創建、顏色設定、圖片背景、滑鼠手勢、工具提示等核心功能。
對話框編輯器放置 Button(IDC_BUTTON_TEST),OnInitDialog 中動態創建 CMFCButton 覆蓋:
CMFCButton* button = new CMFCButton;
button->Create(_T("Test Button"), WS_VISIBLE,
CRect(5, 5, 80, 50), this, IDC_BUTTON_TEST);
注意:示例為簡化直接 new 會洩漏記憶體,實際專案應用成員變量管理生命週期。原生按鈕屬性設 Visible=False 隱藏,動態按鈕共享同一資源 ID 實現「影分身」效果。


// 文字、顏色
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("俺是提示"));
導入位圖資源 (IDB_BITMAP1),創建第二個按鈕:
CMFCButton* button1 = new CMFCButton;
button1->Create(_T(""), WS_VISIBLE, CRect(160, 15, 280, 150), this, IDC_BUTTON_TEST);
button1->SetImage(IDB_BITMAP1); // 直接設定圖片

運行效果:滑鼠經過文字按鈕變藍色、圖片按鈕顯示位圖,均具手型游標與工具提示。
CMFCButton 還支援:圖片對齊、按下/禁用狀態圖片、邊框樣式、文字偏移、透明度、動畫效果等。建議查閱 MSDN 文檔挖掘更多潛力。
本文出自「正面旺得福反面泰瑞寶」博客,轉載請保留出處:原文鏈接