Установить цвет фона определенного элемента управления - PullRequest
0 голосов
/ 02 июня 2011

Я искал в сети, ища способ установить цвет фона диалогового элемента управления.

Мне удалось сделать это с помощью этого кода:

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

Однако то, что я на самом деле ищу, это раскрасить только определенный статический элемент управления, а не все статические элементы управления, которые есть в моем диалоговом окне. Есть какой-либо способ сделать это? Возможно, установить hdc на что-то, используя GetDlgItem (hdlg, "IDC_MYCONTROL")?

- ОБНОВЛЕНИЕ

После предложений я закончил с этим:

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 ]

1 голос
/ 02 июня 2011

HWND передается в диалог, чтобы вы могли;

 HWND hWnd = (HWND) lParam;
 if (hWnd == GetDlgItem(hdlg, "IDC_MYCONTROL")) {
     ...
0 голосов
/ 02 июня 2011

Убедитесь, что lParam соответствует дескриптору ребенка, для которого вы хотите изменить цвет.

...