При изменении цвета, я слушаю WM_CTLCOLORSTATIC и действовать соответственно:Изменение win32 игровая
LRESULT ProcessWindowMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
switch (uMsg)
{
case WM_CTLCOLORSTATIC:
LRESULT lBrush = ::DefWindowProc(hWnd, uMsg, wParam, lParam); // get default brush used so far
::SetBkMode((HDC)wParam, TRANSPARENT);
::SetTextColor((HDC)wParam, RGB(m_color.red, m_color.green, m_color.blue));
return lBrush;
}
}
Это хорошо работает с регулярными статическими текстами: этикетки и так далее, но не оказывает никакого влияния на обычных радио-кнопок ,
Во время моих попыток отладки, я пытался слушать:
- WM_DRAWITEM - не получают никаких событий
- WM_CTLCOLORBTN - получать события только для обычных кнопок (OK/CANCEL)
- WM_CTLCOLOREDIT - не получает никаких событий.
Я подклассифицирую в другое окно, которое не создано/создано мной, но создано моим процессом.
Вы не можете контролировать эти цвета, когда темы являются активными. –
Кнопки управления поддерживают 'NM_CUSTOMDRAW', возможно, можно изменить цвет текста таким образом (я никогда не пробовал). –
Почему вы не обрабатываете WM_PAINT и WM_ERASEBKGND и не нарисовываете его ur –