换色后,我会听WM_CTLCOLORSTATIC并采取相应行动:
LRESULT ProcessWindowMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
switch (uMsg)
{
case WM_CTLCOLORSTATIC:
LRESULT lBrush = ::DefWindowProc(hWnd, uMsg, wParam, lParam); // get default brush used so far
::SetBkMode((HDC)wParam, TRANSPARENT);
::SetTextColor((HDC)wParam, RGB(m_color.red, m_color.green, m_color.blue));
return lBrush;
}
}
这适用于常规静态文本:标签等,但对常规单选按钮没有影响。
在我的调试尝试期间,我试着听过:
我正在继承到另一个不是由我创建/创建的窗口,而是由我的进程构建。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果您有兴趣绘制完整的单选按钮,您需要做的是为单选按钮设置自定义窗口过程。在该过程中,您将获得WM_PAINT和WM_ERASEBKGND消息。 在擦除背景中,您只需填充控件的背景颜色。
在WM_PAINT中,您可以绘制控件,获取控件的窗口文本,并使用SetTextColor执行DrawText,将颜色设置为您需要的任何颜色
绘制无线电图像(圆圈和内部点)。您可以获取控件的所有状态变量并根据它绘制,就像它是否选中一样。每当你需要重新绘制时,即设置了新文本,只需调用invalidateRect强制重新绘制..