C++ 包含不透明文本和按钮的透明窗口
我正在创建一个非侵入式弹出窗口,在处理耗时的操作时通知用户。目前,我正在通过调用C++ 包含不透明文本和按钮的透明窗口,c++,winapi,mfc,gdi+,gdi,C++,Winapi,Mfc,Gdi+,Gdi,我正在创建一个非侵入式弹出窗口,在处理耗时的操作时通知用户。目前,我正在通过调用SetLayeredWindowAttributes设置其透明度,这给了我一个合理的结果: 但是我希望文本和关闭按钮在保持背景透明的同时显得不透明(白色文本看起来不太合适)-有什么方法可以做到这一点吗?我不能肯定,你需要尝试一下,但是因为所有东西都是一个窗口,您可以尝试设置按钮的分层属性,使其不透明 至于文本,您可以将其放在自己的框架中,设置背景和前景颜色,并修改其分层属性以使背景颜色透明 但是,由于这些是子窗口而
SetLayeredWindowAttributes
设置其透明度,这给了我一个合理的结果:
但是我希望文本和关闭按钮在保持背景透明的同时显得不透明(白色文本看起来不太合适)-有什么方法可以做到这一点吗?我不能肯定,你需要尝试一下,但是因为所有东西都是一个窗口,您可以尝试设置按钮的分层属性,使其不透明 至于文本,您可以将其放在自己的框架中,设置背景和前景颜色,并修改其分层属性以使背景颜色透明
但是,由于这些是子窗口而不是顶级窗口,我真的不知道它是否能工作。我怀疑您需要两个顶级窗口,而不是一个-一个是alpha混合窗口,另一个是第一个窗口上方显示的不透明文本和按钮,但背景透明。要在单个窗口中实现这一点,您需要使用API调用,但使用此调用将导致按钮在与(悬停高亮显示、焦点等)交互时不会重新绘制 如果此应用程序仅适用于Vista,则可能有一个新的API调用可供您使用,但我认为它在XP或更早版本中不可用。为了在分层窗口中执行“正确”alpha,您需要通过调用
UpdateLayeredWindow
为窗口管理器提供一个PARGB位图
据我所知,实现这一目标的最干净的方法是:
位图
对象Graphics
对象,以便在此位图
对象中绘制图形对象
Bitmap
对象上的GetHBITMAP
方法以获取WindowsHBITMAP
位图
对象CreateCompatibleDC
创建内存DC,并从步骤5中选择HBITMAP
HBITMAP
另外,由于您将要输出文本,我建议您调用
SystemParametersInfo
以获得默认的抗锯齿设置(SPI_getfontshipping
),然后调用图形对象上的SetTextRenderingHint
,将抗锯齿类型设置为用户配置的同一类型,为了更好的外观。很抱歉stackoverflow上没有PM功能-因此我必须在这里发表评论-您是否可以分享最终解决方案的代码-类似于Koro所指出的?谢谢