標籤:
1、使用畫刷將整個介面初始化為黑色
wndclass.hbrBackground = CreateSolidBrush(0);
2、WM_CREATE建立視窗的時候
hIns = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE); hwndRect = CreateWindow(L"static", L"", WS_VISIBLE|WS_CHILD|SS_WHITERECT, 0, 0, 0, 0, hwnd, (HMENU)9, hIns, NULL); for (int i = 0; i < 3; ++i) { hwndScroll[i] = CreateWindow(L"scrollbar", L"", WS_VISIBLE|WS_CHILD|SBS_VERT|WS_TABSTOP, 0,0,0,0,hwnd,(HMENU)i, hIns, NULL); hwndLabel[i] = CreateWindow(L"static", szColorLabel[i], WS_VISIBLE|WS_CHILD|SS_CENTER,0,0,0,0,hwnd,(HMENU)(i+3), hIns,NULL); hwndValue[i] = CreateWindow(L"static",L"0",WS_VISIBLE|WS_CHILD|SS_CENTER,0,0,0,0,hwnd,(HMENU)(i+6),hIns,NULL); SetScrollRange(hwndScroll[i], SB_CTL, 0, 255, FALSE); SetScrollPos(hwndScroll[i], SB_CTL, 0, FALSE); OldScroll[i] = (WNDPROC)SetWindowLong(hwndScroll[i], GWL_WNDPROC, (LONG)ScrollProc); hBrush[i] = CreateSolidBrush(crPrim[i]); } hBrushStatic = CreateSolidBrush(GetSysColor(COLOR_BTNHIGHLIGHT)); cyChar = HIWORD(GetDialogBaseUnits());
注意,在hwndRect的建立風格時候使用SS_WHITERECT
在msdn上面的描述是這樣的: Specifies a rectangle filled with the color used to fill the window background. The default is white.
說明使用預設的白色用來填充視窗背景色。並在WM_SIZE的時候將hwndRect充滿整個視窗的左半部分,所以整個視窗的左半部分顯示為白色。
這裡通過攔截捲軸的預設視窗處理函數來進行對捲軸的一些特殊處理 OldScroll[i] = (WNDPROC)SetWindowLong(hwndScroll[i], GWL_WNDPROC, (LONG)ScrollProc);
case WM_CTLCOLORSCROLLBAR: return (LRESULT)hBrush[GetWindowLong((HWND)lParam, GWL_ID)]; case WM_CTLCOLORSTATIC: { int id = GetWindowLong((HWND)lParam,GWL_ID); if (id > 2 && id < 9) { SetTextColor((HDC)wParam, crPrim[id % 3]); SetBkColor((HDC)wParam, GetSysColor(COLOR_BTNHIGHLIGHT)); return (LRESULT)hBrushStatic; } } break;
在static和scrollbar類型的介面畫刷攔截顯示中,通過返回對應的畫刷控制代碼實現對static文字背景顏色的填充。也可以有其他一些映像之類的填充。
以下是在WM_VSCROLL中執行的修改整個視窗背景畫刷,並使整個視窗背景的右半部分無效,重新填充顏色
DeleteObject((HBRUSH)SetClassLong(hwnd,GCL_HBRBACKGROUND, (LONG)CreateSolidBrush(RGB(color[0],color[1],color[2]))));
InvalidateRect(hwnd,&rcColor,TRUE);
windows程式設計第九章colors