我正在创建一个非侵入式弹出窗口,以在处理耗时的操作时通知用户。目前,我通过调用SetLayeredWindowAttributes
设置其透明度,这给了我一个合理的结果:
alt text http://img6.imageshack.us/img6/3144/transparentn.jpg
但是我希望文本和关闭按钮显示为不透明(白色文本看起来不太正确),同时保持背景透明-有办法吗?
最佳答案
为了在分层窗口中执行“适当的” alpha,您需要通过调用UpdateLayeredWindow
为窗口管理器提供PARGB位图。
我知道的最简单的方法如下:
Bitmap
像素格式创建一个GDI + PixelFormat32bppPARGB
对象。 Graphics
对象以绘制此Bitmap
对象。 Graphics
对象。GetHBITMAP
对象上调用Bitmap
方法以获取Windows HBITMAP
。 Bitmap
对象。 CreateCompatibleDC
创建一个内存DC,然后从第5步中选择HBITMAP
。 HBITMAP
。此方法应允许您控制所绘制的所有内容的Alpha通道:背景透明,文本和按钮透明。
另外,由于将要输出文本,因此建议您调用
SystemParametersInfo
以获得默认的抗锯齿设置(SPI_GETFONTSMOOTHING
),然后再调用Graphics对象上的SetTextRenderingHint
将抗锯齿类型设置为与用户配置的类型相同的类型。 ,以获得更好的外观。