(Win API) Я не могу изменить цвет строки заголовка (не в клиентской области) с WM_NCPAINT - PullRequest
0 голосов
/ 17 июня 2011

Я попытался установить цвет фона в WM_NCPAINT, чтобы изменить цвет строки заголовка, но он как-то не изменится. Вопрос в том, являются ли SetBkColor и SetTextColor действительными для WM_NCPAINT?

case WM_NCPAINT:
        {
            HDC hdc = ::GetWindowDC(hwnd);

            ::SetTextColor(hdc,RGB(0,0,0));
            ::SetBkColor(hdc,RGB(255,255,255));
            ReleaseDC(hwnd,hdc);
            return 0;
        }

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

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

Во-вторых, я думал, что эти цвета будут влиять только на будущие TextOut вызовы для данного контекста. Возможно, строка заголовка не использует эти вызовы.

Как минимум, вам, вероятно, следует попытаться сделать что-то, что приведет к этому, например, изменить текст в строке заголовка.


Не то чтобы это предназначалось для того, чтобы остановить вас, и у меня может не быть всех фактов, но я лично нахожу программы, которые игнорируют мои желания, довольно раздражающими. Если бы я, как пользователь, хотел, чтобы у моих программ были разные цветные заголовки, я бы сам их настроил, большое спасибо: -)


И, пока еще еще один в стороне, если вы перехватите сообщение WM_NCPAINT, вам придется либо самому заняться всем (не рекомендуется), либо сначала вызвать базовую версию, а затем внести свои изменения поверх это (и, честно говоря, это также не рекомендуется из-за больших вариаций макетов).

0 голосов
/ 17 июня 2011

Эти функции действительны, но вы ничего не рисовали. Попробуйте FillRect или что-то подобное.

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