Статический элемент управления со стилем WS_EX_TRANSPARENT не перекрашивается

Я пытаюсь создать элемент управления, реализующий попиксельное альфа-смешение при рисовании 32-битного растрового изображения.

Я расширил CWnd и использую статический элемент управления в редакторе ресурсов. Мне удалось правильно нарисовать альфа-канал, но статический элемент управления продолжает рисовать серый фон.

Я перезаписал OnEraseBkgnd, чтобы элемент управления не рисовал фон, но это не сработало. Наконец-то мне удалось это сделать с помощью WS_EX_TRANSPARENT.

Моя проблема сейчас в том, что мой контроль передается другому контролю. В первый раз, когда отображается диалоговое окно, все работает нормально ... но если я нажимаю на «родительский» элемент управления (то есть тот, который находится под моим контролем), мой элемент управления не получает сообщение WM_PAINT. Так что его больше не красят.

Если я минимизирую приложение и снова максимизирую его, элементы управления снова окрашиваются.

Кто-нибудь может намекнуть? Я схожу с ума от этого управления !!!

Спасибо.


person Javier De Pedro    schedule 26.11.2008    source источник


Ответы (1)


Я бы сказал, что если вы обрабатываете и сообщения WM_ERASEBKGND, и WM_PAINT, тогда вам следует охватить все параметры рисования, не прибегая к использованию Стиль WS_EX_TRANSPARENT.

Вы уверены, что ваш код не передает эти сообщения в обработку по умолчанию?

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

person jussij    schedule 27.11.2008