Значок на панели инструментов не прозрачен - PullRequest
0 голосов
/ 18 мая 2009

Мы создали панель инструментов IE. мы отображаем значок на панели инструментов, используя статический элемент управления и сохраняя над ним изображение.

, поскольку этот статический элемент управления не прозрачен, поэтому этот значок отображает некоторый фоновый цвет (это цвет по умолчанию общих элементов управления Windows).

возможно ли сделать статический элемент управления прозрачным независимо от тем браузера.

проект разработан в ATL C ++.

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

1 Ответ

1 голос
/ 16 декабря 2009

Ну, я не знаю много об ATL, но в стандартном Windows API вы бы использовали функцию LoadImage для загрузки изображения. Вот несколько советов для получения изображений с прозрачными частями (прозрачного фона):

  1. Изображение должно иметь «ключевой цвет», и каждый пиксель этого цвета на изображении станет прозрачным во время отображения. Этот цвет должен быть цветом первого пикселя, расположенного в левом верхнем углу изображения. После вызова LoadImage с определенными флагами (подробности ниже) окна загрузят изображение, прочитают цвет верхнего левого пикселя и сделают все пиксели в изображении того же цвета, что и первый, который будет скрыт (они сделаны прозрачными).

  2. Когда вы вызываете LoadImage, третий параметр должен быть IMAGE_BITMAP ИЛИ IMAGE_ICON, и это зависит от того, какие функции GDI вы используете для отображения изображения (функции значков или функции растрового изображения). Также последний флаг должен содержать LR_LOADTRANSPARENT, чтобы правильно использовать цветовую маркировку.

  3. После динамической загрузки изображения, как описано выше, у вас будет дескриптор этого ресурса, который вы можете динамически рисовать в контексте отображения вашего статического элемента управления, используя стандартные функции GDI, например DrawIconEx, если вы загрузили его с помощью флага IMAGE_ICON .

Надеюсь, это поможет.

...