所以这是一个感谢small, readable MFC sample。但它的背景是一个坚实的形象;我想知道如何创建一个透明的PNG作为app backround?
答案 0 :(得分:1)
有两种基本方法可以改变窗口的非客户端(“chrome”)区域。
Layered windows,在Windows XP中引入 - 并允许不同级别的窗口效果。这里的技术是将WS_EX_LAYERED
样式添加到窗口 - 这会阻止WM_PAINT
(在MFC CWnd::OnPaint
中)运行。相反,分层窗口由调用UpdateLayeredWindow
的应用程序绘制,提供一个填充了预乘32bpp数据的DIBSection。
Windows Vista引入了Desktop Window Manager,它在绘制窗口之前编写窗口以启用桌面alpha效果。使用DWM API获取alpha效果不像PNG那样可以自定义,但仍然很有吸引力。
这两种技术都会遇到问题,因为子窗口绘制不能识别alpha - 分层窗口根本不会绘制子窗口,因此您需要手动枚举并将所有子控件绘制到屏幕外表面。 DWM窗口会绘制子控件 - 但本机应用程序可用的标准窗口控件都没有被修改为支持alpha。
具有讽刺意味的是,表面上的.NET WinForms应用程序看起来只是简单地包装了标准窗口常用控件,但实际上所有标准控件都已经重新开发用于.NET,并且当它们被放置在窗口的“玻璃”区域时它们正确地绘制