C и Windows API: изменение цвета статических элементов управления, которые являются потомками элемента управления с вкладками - PullRequest
0 голосов
/ 15 апреля 2011

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

Когда я определяю главное окно как родительский объект static, оно работает нормально.Но как я могу изменить цвет, пока они являются дочерними по отношению к табу?

Ответы [ 2 ]

0 голосов
/ 05 июля 2015

Дочерние элементы управления отправляют WM_CTLCOLORSTATIC своему родителю. Если вы хотите, чтобы элемент управления вкладками был родительским для статического элемента управления, вам нужно создать подкласс элемента управления вкладками и обработать там WM_CTLCOLORSTATIC

0 голосов
/ 13 января 2012

Как говорит Дэвид Хеффернан, когда визуальные стили (темы) включены, элемент управления на вкладке имеет причудливый градиентный фон.Поскольку это работает только тогда, когда дочерние элементы управления на вкладке имеют одинаковый фон, элементы управления, связанные с элементами управления вкладками, на самом деле имеют фоны, нарисованные родителем.

Да, это не работает с Темами.Как мне заставить это работать?

Нет, в этом весь смысл визуальных стилей.Если вы хотите этот вид детального контроля над внешним видом, вам следует отключить визуальные стили для ваших конкретных элементов управления.

Для этого вы можете использовать функцию SetWindowTheme .Передайте дескриптор окну управления в качестве первого параметра и пустую строку для двух последних параметров:

SetWindowTheme(hwndCtrl, L" ", L" ");

Конечно, вам придется включить uxtheme.h, чтобы вызвать эту функцию, иссылка на uxtheme.lib.
Если вы хотите, чтобы ваше приложение продолжало работать над версиями Windows до XP (когда были представлены API для создания тем), вам нужно будет либо использовать задержку загрузки, либо LoadLibrary и GetProcAddress для динамического вызова функции.

Вы также можете попробовать вызвать функцию EnableThemeDialogTexture и указать флаг ETDT_DISABLE, чтобы отключить фоновое текстурирование, применяемое к диалоговым окнам вкладок.

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