复选框改变文本颜色。

3
背景改变了,但文字颜色没有变化。 这是我的代码:
case WM_CTLCOLORSTATIC:
{
    DWORD CtrlID = GetDlgCtrlID((HWND)lParam); //Window Control ID

    if(CtrlID == IDC_CHECK_CHAT)
    {
        HDC hdcStatic = (HDC) wParam;
        SetTextColor(hdcStatic, RGB(255,255,255));
        SetBkColor(hdcStatic, RGB(70,70,70));
        return (INT_PTR)hBrush;
    }
}

资源文件:

CONTROL         "Blah Blah Blah",IDC_CHECK_CHAT,
                "Button",BS_AUTOCHECKBOX | WS_TABSTOP,24,72,137,10

复选框被定义为什么?更典型的做法是直接与IDC_CHECK_CHAT进行比较... - HerrJoebob
IDC_CHECK_CHAT = '复选框' 让我修改一下,让它更清晰明了。 - Ido Hadar
可能需要查看更多您的消息转换。请查看https://dev59.com/REnSa4cB1Zd3GeqPP6uQ?rq=1,看看那里的建议是否能够帮助您解决问题。 - HerrJoebob
下面的答案比链接(位于https://dev59.com/SW7Xa4cB1Zd3GeqPvvNF.)中的答案更有用。 - CP Taylor
1个回答

9
你需要首先使用 SetWindowTheme 函数来移除主题:
HWND hwndCheckbox = GetDlgItem(_hdlg, IDC_CHECK_CHAT);
SetWindowTheme(hwndCheckbox, L"wstr", L"wstr");

在您可以给文本上色之前需要做的事情。

这个主题名wstr是什么意思? - David Heffernan
1
只需要一个不存在的主题名称就可以完成任务。 - Jichao
1
非常有帮助--但请注意不要在WM_CTLCOLORSTATIC处理程序代码中调用SetWindowTheme。否则很可能会导致无限循环。 - CP Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接