2008-11-29 8 views
5

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

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

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

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

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

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

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

Спасибо,

Хавьер

ответ

1

Возьму шанс. :-)

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

General Solution for Transparent Controls

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

Смежные вопросы