一般情況下,通過處理WM_GETCTLCOLORSTATIC
更改靜態文本控件的繪製。
在該處理程序中,您可以更改有關DC的內容,如文本顏色,背景模式,背景顏色,甚至是選定的字體。
您還可以返回GDI畫筆的句柄(使用類型轉換系統獲取它)。該控件將首先使用畫筆擦除自身,然後繪製文本。
對於當前窗口的子項目的所有靜態控件都會發生回調,因此您首先需要測試以確定它是否是您關心的子項。
例如:
case WM_CTLCOLORSTATIC:
HWND hwnd = (HWND) lParam;
if (hwnd == hwndStatic) {
HDC hdc = (HDC) wParam;
::SetTextColor(hdc, RGB(0xFF, 0, 0)); // set the text to red
::SetBkMode(hdc, OPAQUE);
::SetBkColor(hdc, RGB(0x00, 0xFF, 0x00)); // set background to green
HBRUSH hbrBackground = ::GetSysColorBrush(COLOR_WINDOW);
return (INT_PTR) hbrBackground;
}
return 0;
這說明幾件事情可以做。你可能不想做所有這些,但看到他們都在行動,這可能是有教育意義的。
請注意,如果您創建畫筆以返回,則必須跟蹤它並稍後刪除它。我通過依靠GetSysColorBrush
避免了這個問題。系統擁有這些,所以你不應該刪除它們。您還可以使用GetStockObject
作爲您不必管理的系統GDI對象。但是如果您需要自定義顏色,則必須使用CreateSolidBrush
然後清理它。
感謝您的非常快的答覆!我試圖添加這個,但得到了以下錯誤:錯誤#2048:未聲明的標識符'hMyStatic'。 和錯誤#2168:'=='的操作數具有不兼容的類型'HWND'和'int'。這可能是一個簡單的修復,但我今天剛剛開始使用這種語言,我仍然在學習,所以我很掙扎,並希望得到您的幫助。 –
對於之前的請求感到抱歉,由於我更改了hMyStatic,因此現在似乎有點工作。 –
@RahulKhosla,我不得不承認這個例子並不完整 - 你需要將刷柄保存在某個地方,並在將來的某個地方刪除它。 –