Как рисовать прозрачные области для дочерних элементов управления?

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

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


person Mark Ingram    schedule 11.05.2009    source источник


Ответы (1)


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

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

person ReinstateMonica Larry Osterman    schedule 12.05.2009
comment
Я обрабатываю сообщение и возвращаю FALSE, чтобы выполнить весь рисунок в WM_PAINT. Сейчас попробую эту функцию... - person Mark Ingram; 12.05.2009