如何设置按钮的背景颜色,包括复选框按钮

How Do I Set the Background Color of buttons including a Checkbox button?

本文关键字:按钮 颜色 背景 包括 复选框 设置 何设置      更新时间:2023-10-16

如何设置按钮的背景颜色,包括复选框按钮?

我今天努力找到答案 - 认为回答这个问题应该很简单,但是我偶然发现的信息毫无用处,因此有可能在那里复制东西,但我找不到,但我找不到,但我找不到,但我找不到,但我找不到,但我找不到,但我找不到,但我找不到,但是我将把这个Quick'n'n'dirty方法...

所有'按钮'类窗口将 WM_CTLCOLORSTATIC发送到其父窗口,然后可以调用 ::SetBkColor((HDC)wParam, rgbBkColor),然后返回该颜色的刷子。

如果这全部使用了系统颜色,则不需要管理刷子,您可以简单地要求::GetSysColor(sysIndex),然后返回返回的刷子的::GetSysColorBrush(sysIndex)

如果您使用的是自定义颜色,则需要创建自己的刷子并为此管理手柄。

根据Windows Standard Message框,我需要此代码来更换消息框,该消息框更换使用白色背景,并使用灰色背景的下部使用灰色背景。因此,我的静态控制(图标(需要是白色的,而我的其他按钮(包括"不再要求"复选框(需要具有灰色背景(复选框通常具有白色背景(。

因此,我处理wm_erasebkgnd正确绘制背景的两部分,然后处理WM_CLTLCOLORORSTATATIC,以确保所有按钮都正确地"透明",以便它们出现在其上的背景。就我而言,我对图标使用了一个"静态"控件,该控件以灰色为灰色,几个按钮以及一个复选框按钮 - 复选框按钮总是以白色绘制其背景,因此两者都需要一个使固定。

我的示例是使用MFC,但希望您可以为您的目的进行琐碎的翻译:

// add to the message map:
    ON_MESSAGE(WM_CTLCOLORSTATIC, OnCtlColorStatic)
// create the implementation:
LRESULT CRTFMessageBox::OnCtlColorStatic(WPARAM wParam, LPARAM lParam)
{
    // buttons and static controls (icon) send WM_CTLCOLORSTATIC, so we can force them to use the correct background color here...
    const HDC hdc = (HDC)wParam;
    const int idc = ::GetDlgCtrlID((HWND)lParam);
    // choose a system color or brush based on if this is icon (static) or another control (a button)
    const int idx = idc == IDC_STATIC ? COLOR_WINDOW : COLOR_3DFACE;
    // select system color
    ::SetBkColor(hdc, GetSysColor(idx));
    // return system brush (which we don't need to delete!)
    return (LRESULT)GetSysColorBrush(idx);
}