透明窗口上的通用控件?

时间:2019-06-05 23:40:44

标签: winapi transparency common-controls

尽管这个问题有很多变体,但对于希望在使用Win32的透明窗口上使用内置通用控件的简单情况似乎没有一个具体的答案。我不希望控件是透明的,我只是希望它周围的边框是透明的。我不敢相信MS在添加.dll时没有更新.dll来处理透明性,但是我想他们忘记了吗?有没有一种有效的特定方法。可以使用WS_EX_TRANSPARENT关闭按钮,但是在大多数情况下它是不稳定的,但有时会出现部分边框。编辑控件,取决于何时获得焦点。

所以问题很简单:

有没有办法在透明窗口上进行通用控件,使它们周围没有白色边框?

如果没有,是否有一个好的替换库可以通过所有者抽签进行替换?

如果有的话,哪种方法是什么?

仅仅因为控件周围的区域,似乎愚蠢地重新发明了轮子。

TIA !!

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,可以采取以下步骤来达到这种效果。

1。创建一个GDI+像素格式的PixelFormat32bppPARGB位图对象。

2。创建一个Graphics对象以绘制此Bitmap对象。

3。使用GDI+将所有图形绘制到该对象中。

4。销毁步骤2中创建的Graphics对象。

5。调用Bitmap对象上的GetHBITMAP方法以获取Windows HBITMAP

6。销毁Bitmap对象。

7。使用CreateCompatibleDC创建一个内存DC,然后从第5步中选择HBITMAP

8。使用内存DC作为源调用UpdateLayeredWindow

9。选择以前的位图并删除内存DC。

10。销毁步骤5中创建的HBITMAP

此方法应允许您控制所绘制的所有内容的Alpha通道:背景透明,按钮透明。

相似的讨论:Transparent window containing opaque text and buttons