c++ Win32单选按钮背景色



所以首先我使用windows API,没有特殊的库。

我创建了一个单选按钮,代码如下:

g_hRadioButton = CreateWindowEx(0, "BUTTON", "Radio Button",
    WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
    10, 55, 120, 25, hWnd, (HMENU)RADIOBUTTON, GetModuleHandle(NULL), NULL);

现在主窗口的背景是黑色的,所以我希望文本是白色的,背景是透明的。

我试着检查WM_CTLCOLORBTNWM_CTLCOLORSTATIC的消息。

下面是我的代码:

case WM_CTLCOLORBTN:
    SetTextColor((HDC)wParam, 0xffffff);
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (LRESULT)GetStockObject(BLACK_BRUSH);
case WM_CTLCOLORSTATIC:
    SetTextColor((HDC)wParam, 0xffffff);
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (LRESULT)GetStockObject(NULL_BRUSH);

这个不行,背景还是白色,文字是黑色的

我还通过链接到ComCtl32启用了视觉样式。Lib,创建清单和所有这些。

编辑:

现在尝试处理NM_CUSTOMDRAW消息。这是我的代码,但它没有效果,我很确定我做错了什么。

case WM_NOTIFY:
{
    if (((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
    {
        LPNMCUSTOMDRAW nmCD = (LPNMCUSTOMDRAW)lParam;
        switch(nmCD->dwDrawStage)
        {
            case CDDS_PREPAINT:
                return CDRF_NOTIFYITEMDRAW;
            case CDDS_ITEMPREPAINT:
                SetTextColor(nmCD->hdc, 0xffffff);
                SetBkColor(nmCD->hdc, 0x000000);
                return CDRF_DODEFAULT;
        }
    }
    break;
}

至少有人能给我指出正确的方向吗?

也许一旦你的应用程序使用视觉样式运行,你最好处理按钮控件的NM_CUSTOMDRAW通知。最初,这些仅用于普通控件,但相当多的版本已经以同样的方式扩展了按钮行为。

最新更新