C ++ Win32单选按钮背景颜色

时间:2011-09-23 15:00:26

标签: c++ windows api button background

首先我使用的是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;
}

有人至少可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

也许只要您的应用程序使用视觉样式运行,您最好处理NM_CUSTOMDRAW按钮控制通知。最初,这些仅用于通用控件,但是很多版本已经以相同的方式扩展按钮行为。