Создание настраиваемого прозрачного элемента управления - PullRequest
5 голосов
/ 30 ноября 2008

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

Сейчас я использую пользовательский элемент управления в редакторе ресурсов и присоединяю его к классу, производному от CWnd. Когда я регистрирую свой пользовательский класс, я устанавливаю hbrBackground структуры WNDCLASS в NULL_BRUSH для достижения прозрачности элемента управления.

В OnPaint элемента управления я использую AlphaBlend для рисования растрового изображения альфа-смешивания на пиксель.

Это работает довольно хорошо, но у меня есть две проблемы:

  • Я хочу изменить отображаемое растровое изображение, когда мышь находится над элементом управления. Поскольку элемент управления прозрачен, области, в которых одно растровое изображение не перекрывается другим растровым изображением, не стираются. Как я могу стереть фон при смене изображения?

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

Возможно, я делаю что-то не так или я ошибаюсь в том, как я пытаюсь реализовать свой контроль. Буду признателен за любую помощь.

Спасибо

Хавьер

1 Ответ

1 голос
/ 17 августа 2010

Я рискну. : -)

Это должно дать вам все, что вам нужно для достижения того, что, я думаю, вы хотите.

Общее решение для прозрачных элементов управления

Что касается вопросов Z-порядка, z-порядок не влияет на приоритет сообщения. Вам нужно будет опубликовать некоторый код, чтобы мы могли определить, что там происходит.

...