我正在用Windows API創建一個基本的GUI,並且遇到了問題。它以一個自定義背景色打開的主窗口開始,我設置了(RGB(230,230,230))
。然後它會在靜態控件的左上角顯示文本。Static Control Background Color with C++
settingstext = CreateWindow("STATIC",
"SETTINGS",
SS_LEFT | WS_CHILD,
12,
20,
100,
20,
hwnd,
NULL,
proginstance,
NULL);
ShowWindow(settingstext, 1);
這工作,但會顯示文字時,我需要一種方法來改變它的背景相匹配的主窗口,否則它只是看起來像它不混合。
我的問題是,我該怎麼做?我目前使用下面的方法,它的工作原理,但我想知道,有沒有辦法永久設置背景顏色,在靜態控制的CreateWindow
函數之後,而不更改系統顏色,並且只適用於該方法控制,而不是任何發送消息的東西。我嘗試過在消息循環之外使用GetDC
函數和SetBkColor
函數,但沒有任何效果。
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(0,0,0));
SetBkColor(hdcStatic, RGB(230,230,230));
return (INT_PTR)CreateSolidBrush(RGB(230,230,230));
}
我想這樣做,因爲...
- 我不想填補我的消息循環與需要被調用每一個窗口重新繪製時間的函數。
- 這些更改僅適用於此靜態控件。
我會非常感謝任何可以提供的幫助,至少指出我在正確的方向,謝謝。
您可以通過檢查'(HWND)lParam == settingstext'來限制'WM_CTLCOLORSTATIC'代碼對靜態控制的影響。 你的例子存在一個問題,那就是你創建的所有筆刷都不會被刪除。 – 2010-12-21 01:45:59