Windows API学习-修改控件背景文字颜色(2)
- 简 介
- 下 载
- 留 言
- 说 明
修改文字背景颜色
上节中,我们的代码只是改变了控件的背景颜色(整个子窗口的背景颜色),却忽略了文字的背景颜色。
修改文字背景颜色使用 SetBkColor 函数,它的原型为:
COLORREF SetBkColor( HDC hdc, //设备环境句柄 COLORREF crColor //背景颜色 );
修改文字前景色(文字颜色)使用 SetTextColor 函数,它的原型为:
COLORREF SetTextColor( HDC hdc, //设备环境句柄 COLORREF crColor //背景颜色 );
这里我们修改的是 static 控件中的文本颜色,所以需要获取 static 控件的设备环境句柄。非常巧妙的是,发送 WM_CTLCOLORSTATIC 消息时,wParam 参数表示的就是 static 控件的设备环境句柄(lParam 表示控件句柄)。
下面的代码会修改文本的背景色和前景色:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdcWnd; HDC hdcStatic; static HFONT hFont; //逻辑字体 static HWND hStatic; //静态文本框控件 static HBRUSH hBrush; //画刷 switch (message) { case WM_CREATE: //创建画刷 hBrush = CreateSolidBrush(RGB(0x41, 0x96, 0x4F)); //创建逻辑字体 hFont = CreateFont(-14/*高*/, -7/*宽*/, 0, 0, 700 /*700表示粗体*/, FALSE/*斜体?*/, FALSE/*下划线?*/, FALSE/*删除线?*/, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, TEXT("微软雅黑") ); //创建静态文本框控件 hStatic = CreateWindow(TEXT("static"), TEXT("欢迎来到泛容!"), WS_CHILD | WS_VISIBLE | SS_CENTERIMAGE | SS_CENTER, 20 /*x坐标*/, 20 /*y坐标*/, 240 /*宽度*/, 60 /*高度*/, hWnd /*父窗口句柄*/, (HMENU)1 /*控件ID*/, hInst /*当前程序实例句柄*/, NULL ); //设置控件的字体 SendMessage(hStatic, WM_SETFONT, (WPARAM)hFont, NULL); break; case WM_CTLCOLORSTATIC: hdcStatic = (HDC)wParam; SetTextColor(hdcStatic, RGB(255, 255, 255)); //白色 SetBkColor(hdcStatic, RGB(0x41, 0x96, 0x4F)); //翠绿色 return (INT_PTR)hBrush; case WM_PAINT: hdcWnd = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: DeleteObject(hBrush); DeleteObject(hFont); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
运行结果: