Не могу изменить цвет фона окон, которые находятся внутри другого окна - PullRequest
0 голосов
/ 25 марта 2019

Я хочу изменить цвет фона окна STATIC, как при загрузке, так и во время выполнения. Пока мне удалось изменить цвет следующим образом:

    case WM_CTLCOLORSTATIC:
    {
        HDC hdcStatic = (HDC)wParam;
        SetTextColor(hdcStatic, RGB(200, 200, 20));
        SetBkColor(hdcStatic, RGB(10, 10, 10));
        SetBkMode(hdcStatic, TRANSPARENT);
        return (INT_PTR)CreateSolidBrush(RGB(30, 30, 30));
    }

Все работает нормально, цвет фона меняется, за исключением любых окон STATIC, которые находятся внутри другого статического окна:

HWND mainContainer = CreateWindowEx
(
    0,
    _TEXT("STATIC"),
    "",
    WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_SOLID,
    10, 10, 500, 500,
    hwnd,
    NULL,
    (HINSTANCE)GetWindowLong(hwnd, GWLP_HINSTANCE),
    NULL
);

HWND subItem = CreateWindowEx
(
    0,
    _TEXT("STATIC"),
    "SubItem",
    WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_SOLID,
    10, 10, 100, 100,
    mainContainer,
    NULL,
    (HINSTANCE)GetWindowLong(mainContainer, GWLP_HINSTANCE),
    NULL
);

В этом случае изменяется цвет mainContainer, но не цвет фона для подэлемента. Есть идеи, почему это происходит? Спасибо!

1 Ответ

1 голос
/ 26 марта 2019

Сообщение WM_CTLCOLORSTATIC будет отправлено только в родительское окно, но не в родительское окно.

Согласно О статических элементах управления :

Процедура окна для предопределенного класса окна статического элемента управления выполняет обработку по умолчанию для всех сообщений, которые статический контроль процедура не обрабатывается.

WM_CTLCOLORSTATIC нет в списке, который он обрабатывает. Таким образом, предопределенная оконная процедура передает сообщение в DefWindowProc для обработки по умолчанию.

(Мы действительно не часто помещаем статическое окно в другое статическое окно. Это не обычная операция. Поэтому вам следует сбросить родительское окно subItem на hwnd.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...