Как нарисовать прозрачные области для дочерних элементов управления? - PullRequest
1 голос
/ 11 мая 2009

У меня есть подкласс CTabCtrl, который я пытаюсь переопределить WM_PAINT для выполнения пользовательского рисования. Единственная проблема заключается в том, что при изменении выбранной вкладки в диалоговом окне остаются артефакты, в которых старый код рисования не был удален до того, как новый код был нарисован сверху. (В стандартных элементах управления вкладки выбранная вкладка отображается на 2 пикселя больше, чем невыбранные вкладки, поэтому при переходе от выбранной к невыбранной остаются предыдущие артефакты рисования).

Каков наилучший способ «перекрасить» эту область? Я пытался передать DC родительского элемента управления и BitBlt, помещая его на DC ребенка, но это не работает, потому что родительский DC уже содержит изображение этого элемента управления.

1 Ответ

2 голосов
/ 12 мая 2009

Вы также отменяете сообщение WM_ERASEBACKGROUND? Возможно, вам следует сделать это и стереть область в элементе управления.

Вы можете использовать DrawThemeParentBackground для рисования фона (XP и более поздние версии), если вы не хотите заменять всю логику рисования.

...