Я пытаюсь сделать цвет текста и фона элемента управления групповым полем.Я использую диалоги и Win32.Чтобы проиллюстрировать мою проблему, я создал проект с минимальным кодом, необходимым для воспроизведения проблемы.
Если мы возьмем диалог и добавим в качестве фона какое-то растровое изображение, мы легко увидим истинные цвета группы.коробка управления.По умолчанию без переопределения это будет выглядеть так:
Я попытаюсь установить цвет текста на белый и фон текста прозрачным, используя следующий код:
case WM_CTLCOLORSTATIC: {
HDC hDC = ( HDC )wParam;
SetTextColor( hDC, RGB( 255, 255, 255 ) );
SetBkMode( hDC, TRANSPARENT );
return ( INT_PTR )GetStockObject( HOLLOW_BRUSH );
}
Я протестировал внешний вид с включенным визуальным стилем и без него, изменив манифест с помощью:
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
С визуальными стилями диалог выглядит так:
Фон меняется на недопустимый сплошной цвет в зависимости от фона диалога.Также цвет текста не изменился.При отключенном визуальном оформлении диалоговое окно выглядит следующим образом:
Цвет текста изменился, прозрачность сработала, но прямоугольник группового блока показывает даже то, где находится текст.
Я загрузил проект здесь для всех, кто заинтересован в его тестировании.
Я читал другие подобные вопросы на этом сайте, которые, возможно, предполагают, что это не таквозможно без разделения на подклассы или владельца.Я не против подклассов, но проверяю, что нет лучших способов сделать это в первую очередь.Если единственным способом является создание подклассов, я был бы рад получить информацию о том, что следует переопределить (вероятно, WM_PAINT).Я нашел в Интернете примеры людей, создающих свои собственные элементы управления групповыми полями, но некоторые, похоже, страдают от проблем z-порядка.Следовательно, с подклассами было бы уместно обрабатывать WM_NCHITTEST?
Аналогично, если я переключаю стиль рисования владельца с помощью SetWindowLong (), а затем создаю подкласс для элемента управления, чтобы получить сообщения WM_DRAWITEM, есть ли что-то, на что я должен смотреть?из за?Как мне работать с визуальными стилями и т. Д.?