0

我们已经创建了一个 IE 工具栏。我们通过使用静态控件并在其上保留图像来在工具栏上显示一个图标。

由于此静态控件不透明,因此此图标显示一些背景颜色(这是 Windows 常用控件的默认颜色)。

无论浏览器主题如何,是否可以使静态控件透明。

项目是用 ATL C++ 开发的。

我们尝试将 WS_EX_TRANSPARENT 作为静态控件的属性,当我们尝试在 OnCtrlColorStatic 事件中返回 null_brush 时,问题仍然没有解决。

4

1 回答 1

1

好吧,我对 ATL 了解不多,但在标准 Windows API 中,您会使用LoadImage函数来加载图像。以下是获取具有透明部分(透明背景)的图像的一些技巧:

  1. 图像必须具有“关键颜色”,并且图像中该颜色的每个像素在显示时都会变得透明。该颜色必须是位于图像左上角的第一个像素的颜色。在使用某些标志调用 LoadImage 时(详细如下),windows 将加载图像,读取左上角的像素颜色,并使图像中与第一个具有相同颜色的所有像素隐藏(它们被设置为透明)。

  2. 当您调用LoadImage 时,第三个参数必须是IMAGE_BITMAP 或IMAGE_ICON,这取决于您使用哪些GDI 函数来显示图像(图标函数或位图函数)。此外,最后一个标志必须包含 LR_LOADTRANSPARENT 才能正确使用颜色键控。

  3. 如上所述动态加载图像后,您将拥有此资源的句柄,您可以使用标准 GDI 函数在静态控件的显示上下文上动态绘制,例如 DrawIconEx,如果您使用 IMAGE_ICON 标志加载它。

希望能帮助到你。

于 2009-12-16T15:33:09.447 回答