设置特定控件的背景颜色

时间:2011-06-02 10:36:49

标签: winapi colors background dialog controls

我在网上搜索了一种将背景颜色设置为对话框控件的方法。

我已设法使用此代码执行此操作:

case WM_CTLCOLORSTATIC:
{
    HDC hdcStatic = (HDC) wParam;
    SetTextColor(hdcStatic, RGB(255,255,255));
    SetBkColor(hdcStatic, RGB(0,0,0));

    if (hbrBkgnd == NULL)
    {
        hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
    }
    return (INT_PTR)hbrBkgnd;
}

然而,我实际上要找的只是为特定的静态控件着色,而不是我在对话框中的所有静态控件。反正有没有这样做?也许使用GetDlgItem(hdlg,“IDC_MYCONTROL”)将hdc设置为某个东西?

- 更新

在提出建议之后我最终得到了这个:

case WM_CTLCOLORSTATIC:
{
    HDC hdcStatic = (HDC) lParam;
    HWND hWnd =  (HWND)lParam;
    HWND dlg =GetDlgItem(hDlg, IDC_STATIC2);
    if (hWnd == dlg)
    {
        SetTextColor(hdcStatic, RGB(255,255,255));
        SetBkColor(hdcStatic, RGB(0,0,0));
    }
    if (hbrBkgnd == NULL)
    {
        hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
    }
    return (INT_PTR)hbrBkgnd;
}

似乎即使运行了SetBkColor,对话框也没有任何变化,导致下面描述的奇怪问题。

2 个答案:

答案 0 :(得分:1)

HWND被传递给对话框proc,所以你可以;

 HWND hWnd = (HWND) lParam;
 if (hWnd == GetDlgItem(hdlg, "IDC_MYCONTROL")) {
     ...

答案 1 :(得分:0)

检查lParam是否匹配要更改颜色的子项的句柄。