Что заставляет WS_TABSTOP влиять на порядок рисования окон?

В WTL CBitmapButton не поддерживает изображение с прозрачным слоем, например PNG. поэтому я настроил код для использования GDI+ для рисования PNG, назовите его CPNGButton. А вот на win XP дела обстоят странно. Когда кнопка перекрывается другим окном, кнопка сначала получает WM_PAINT, а затем родителя, что приводит к неверному результату.

введите здесь описание изображения--->введите здесь описание изображения

Проверяю ресурс и убираю атрибут WS_TABSTOP из шаблона кнопки, все нормально, родительское окно получает сначала WM_PAINT, потом кнопку. Что заставляет WS_TABSTOP влиять на порядок рисования окон?


person toki    schedule 27.02.2012    source источник


Ответы (1)


Вот что бывает, когда не рисуешь фон. Это оставляет «дыру» в окне, вы видите пиксели любого окна за вашим. Или рабочий стол, если такого окна нет. Иначе не уверен, какое это имеет отношение к WS_TABSTOP.

Используйте флаг стиля WS_EX_TRANSPARENT. Это сообщает Windows, что вы хотите, чтобы родитель кнопки отрисовывался в окне клиента, чтобы предоставить фоновые пиксели.

person Hans Passant    schedule 27.02.2012
comment
Это обстоятельство все еще иногда возникает даже после удаления WS_TABSTOP. Добавление WS_EX_TRANSPARENT работает нормально! - person toki; 02.03.2012