Ala*_*lan 2 c++ winapi mfc gdi+ gdi
我正在创建一个非侵入式弹出窗口,以便在处理耗时的操作时通知用户.目前我通过调用设置其透明度,SetLayeredWindowAttributes
这给了我一个合理的结果:
alt text http://img6.imageshack.us/img6/3144/transparentn.jpg
但是我希望文本和关闭按钮看起来不透明(用白色文字看起来不太正确)同时保持背景透明 - 有没有办法做到这一点?
小智 10
为了在分层窗口中执行"正确"alpha,您需要通过调用向窗口管理器提供PARGB位图UpdateLayeredWindow
.
我所知道的实现这一目标的最简洁方法如下:
Bitmap
使用PixelFormat32bppPARGB
像素格式创建GDI + 对象.Graphics
要在此Bitmap
对象中绘制的对象.Graphics
在步骤2中创建的对象.GetHBITMAP
上的方法Bitmap
来获取Windows HBITMAP
.Bitmap
对象.CreateCompatibleDC
并从中选择HBITMAP
步骤5.HBITMAP
步骤5中创建的.此方法应该允许您控制绘制的所有内容的Alpha通道:对背景透明,对文本和按钮不透明.
此外,由于您要输出文本,我建议您调用SystemParametersInfo
以获取默认的抗锯齿设置(SPI_GETFONTSMOOTHING
),然后SetTextRenderingHint
在Graphics对象上将抗锯齿类型设置为用户配置的相同类型,更好看.