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

标签 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、创建 list 等来启用视觉样式。

编辑:

现在尝试处理 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按钮控制的通知。最初,这些仅用于通用控件,但相当多的版本也已经以相同的方式扩展了按钮行为。

关于C++ Win32 单选按钮背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531051/

相关文章:

node.js - 错误: The provided keyfile does not define a valid redirect URI

c++ - openCV 更改颜色后不会复制到图像(opencv 和 c++)

c++ - execl - 现在没有可用于编程的内存 (OS X/XCode/C++)

c++ - 如何获得显示器序列号?

.net - Windows 中的 IP 发现

python - 从 Blackberry App World (API) 获取应用特定数据的最佳方式

c++ - 使用 Windows GFlags 应用程序进行堆损坏检测

c++ - 每次使用 C++ 生成相同的 RSA key

windows - 没有 sleep 的 CPU 空闲循环

api - 在 OctoberCMS 中创建 API(Web 服务)