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

问题描述:

所以首先我使用的是Windows API,没有特殊的库。C++ Win32单选按钮背景颜色

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

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; 
} 

难道某人至少可以将我指向正确的方向吗?

+0

你打电话给SetTextColor与RGB(0,0,0)这是黑色 – pezcode

+0

@pezcode固定。在我的实际程序中,我调用了一个返回颜色的函数,无论是白色还是红色。我正在清理它,使这个问题更简单。 – Josh

+0

那么你的问题解决了吗? –

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

+1

关于处理NM_CUSTOMDRAW,请检查以下代码片段:http://msdn.microsoft.com/en-us/library/ff919573.aspx请注意,您不使用SetBkColor来指定背景颜色,正如您在代码中尝试的那样。 –