我正在创建一个非侵入式弹出窗口,以在处理耗时操作时通知用户。包含不透明文本和按钮的透明窗口
alt text http://img6.imageshack.us/img6/3144/transparentn.jpg
然而我想文字和关闭按钮出现不透明(它并不完全看:目前我通过调用SetLayeredWindowAttributes
这给我一个合理的结果设定其透明度正确与白色文本),同时保持背景透明 - 有没有办法做到这一点?
我正在创建一个非侵入式弹出窗口,以在处理耗时操作时通知用户。包含不透明文本和按钮的透明窗口
alt text http://img6.imageshack.us/img6/3144/transparentn.jpg
然而我想文字和关闭按钮出现不透明(它并不完全看:目前我通过调用SetLayeredWindowAttributes
这给我一个合理的结果设定其透明度正确与白色文本),同时保持背景透明 - 有没有办法做到这一点?
为了在分层窗口中执行“正确的”alpha,您需要通过调用UpdateLayeredWindow
来为窗口管理器提供PARGB位图。
实现这一目标,我知道的最彻底的方法是:
PixelFormat32bppPARGB
像素格式的GDI + Bitmap
对象。Graphics
对象以绘制此Bitmap
对象。Graphics
对象2.GetHBITMAP
方法Bitmap
对象来获取Windows HBITMAP
。Bitmap
对象。CreateCompatibleDC
创建内存DC,并从步骤5中选择HBITMAP
。HBITMAP
在步骤5创建该方法应该可用于控制被吸入一切的alpha通道:透明的背景,不透明的文本和按钮。
而且,因为你将要输出的文本,我建议您致电SystemParametersInfo
获得默认抗锯齿设置(SPI_GETFONTSMOOTHING
),然后在图形SetTextRenderingHint
对象设置抗锯齿类型是同一类型由用户配置,以获得更好的外观。
我不能肯定地说,你需要尝试一下,但因为一切都是一个窗口,所以你可以尝试设置按钮的分层属性,使它不透明。
至于文字,你可以把在自己的框架与一组背景和前景颜色,并修改其属性分层,使背景色透明...
但由于这些都是孩子的窗户,而不是顶级窗口,我真的不知道它会起作用。
我怀疑你需要两个顶级窗口而不是一个 - 一个具有alpha混合,另一个显示在第一个上方,带有不透明的文本和按钮,但具有透明背景。要使用单个窗口完成此操作,您需要使用UpdateLayeredWindow API调用,但使用它将导致您的按钮在与它们交互时不会重绘(悬停高亮,焦点等)
有可能if此应用程序仅适用于Vista,但您可以使用新的API调用,但我不相信它在XP或更早版本中可用。
对不起,在stackoverflow上没有PM功能 - 因此我必须在这里发表评论 - 你会分享最终解决方案的代码 - 类似于Koro指出的吗?谢谢 – Steve