其他分享
首页 > 其他分享> > c – 包含不透明文本和按钮的透明窗口

c – 包含不透明文本和按钮的透明窗口

作者:互联网

我正在创建一个非侵入式弹出窗口,以便在处理耗时的操作时通知用户.目前我通过调用SetLayeredWindowAttributes来设置透明度,这给了我一个合理的结果:

alt text http://img6.imageshack.us/img6/3144/transparentn.jpg

但是我希望文本和关闭按钮看起来不透明(用白色文字看起来不太正确)同时保持背景透明 – 有没有办法做到这一点?

解决方法:

为了在分层窗口中执行“正确”alpha,您需要通过调用UpdateLayeredWindow为窗口管理器提供PARGB位图.

我所知道的实现这一目标的最简洁方法如下:

>使用PixelFormat32bppPARGB像素格式创建GDI Bitmap对象.
>创建要在此Bitmap对象中绘制的Graphics对象.
>使用GDI将所有绘图都绘制到此对象中.
>销毁在步骤2中创建的Graphics对象.
>调用Bitmap对象上的GetHBITMAP方法以获取Windows HBITMAP.
>销毁Bitmap对象.
>使用CreateCompatibleDC创建内存DC,并从步骤5中选择HBITMAP.
>使用内存DC作为源调用UpdateLayeredWindow.
>选择上一个位图并删除内存DC.
>销毁在步骤5中创建的HBITMAP.

此方法应允许您控制绘制的所有内容的Alpha通道:对背景透明,对文本和按钮不透明.

此外,由于您要输出文本,我建议您调用SystemParametersInfo以获取默认抗锯齿设置(SPI_GETFONTSMOOTHING),然后调用Graphics对象上的SetTextRenderingHint以将抗锯齿类型设置为用户配置的相同类型,为了更好看.

标签:c,winapi,mfc,gdi,gdi-2
来源: https://codeday.me/bug/20191002/1842081.html