Как нарисовать прозрачные области для дочерних элементов управления?
-
21-08-2019 - |
Вопрос
У меня есть подкласс CTabCtrl, который я пытаюсь переопределить WM_PAINT для выполнения собственного рисования.Единственная проблема заключается в том, что когда я меняю выбранную вкладку, в диалоговом окне остаются артефакты, где старый код рисования не был стерт до того, как новый код был нарисован поверх.(В стандартных элементах управления вкладками выбранная вкладка отображается на 2 пикселя больше, чем невыбранные вкладки, поэтому при изменении с выбранной на невыбранную у вас остаются предыдущие артефакты рисования).
Как лучше всего «перекрасить» эту область?Я попытался получить DC родительского элемента управления и использовать BitBlt на дочернем DC, но это не сработало, поскольку родительский DC уже содержит изображение этого элемента управления.
Решение
Вы также переопределяете сообщение WM_ERASEBACKGROUND?Вероятно, вам следует сделать это и стереть область в элементе управления.
Вы могли бы использовать РисоватьТемаРодительФон для рисования фона (XP и более поздние версии), если вы не хотите заменять всю логику рисования.