【发布时间】:2015-10-27 23:39:01
【问题描述】:
每当我收到WM_CTLCOLORSTATIC 时,我都会尝试更改文本颜色。
LRESULT ProcessWindowMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
switch (uMsg)
{
case WM_CTLCOLORSTATIC:
::SetTextColor((HDC)wParam, RGB(m_color.red, m_color.green, m_color.blue));
::SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)GetStockObject(DKGRAY_BRUSH);
}
return m_orgWndProc(hWnd, uMsg, wParam, lParam);
}
如您所见,“Just a test”的颜色发生了变化,但随之而来的是整个框的背景也发生了变化。
我已尝试返回几乎所有 GetStockObject() 组合,包括
return (LRESULT)GetStockObject(COLOR_BACKGROUND + number)
&
GetCurrentObject((HDC)wparam,OBJ_BRUSH)
我不得不说,这些命令以某种方式操纵了背景的颜色,但从未与过去的默认灰度值匹配。
我在这里错过了什么?
【问题讨论】:
-
你真的应该发布SSCCE...
-
GetStockObject(COLOR_BACKGROUND + number)不正确。你会想要使用GetSysColorBrush()。但是有一个更好的方法来获得默认行为:just callDefWindowProc()并在执行 DC 操作后返回它返回的内容。