试图谷歌,但无法找到明确的答案.
如何使覆盖WM_PAINT的按钮透明.这样你就可以在所有地方看到它的形式,除非画出一些东西.同时避免闪烁.
我看到了SetBkMode(HDC,TRANSPARENT)的示例,使用了NULL_BRUSH,带有CompatibleDC和BitBlts的示例,但我不太确定哪种方法是正确的,以及在父窗口上设置WM_CLIPCHILDREN时它的行为方式.我做过的大部分实验都有一些奇怪的行为.在MSDN上根本找不到关于WM_ERASEBKGND/WM_CTLCOLOR/WM_PAINT/WS_EX_COMPOSITED/WS_CLIPCHILDREN/etc内部关系的好文档.
有没有人知道我在哪里可以阅读关于这个主题与所有相关的陷阱?
嗯,我从来没有找到任何关于这个主题的权威文件.
这只是作为我的相当随机的内存转储尝试获取控件"玩得很好",动画时,在一个被剥皮的窗口(正常非客户区域与位图背景),分层(以获得一个窗口与自定义非客户端带阴影效果的边缘)或扩展的Aero Glass(通过DwmExtendFrameIntoClient)效果.
最后的情况:
通过一些工作,您可以轻松地获得大多数标准控件背后的皮肤.WS_CLIPCHILDREN并且父级上没有背景绘制将最小化闪烁.处理WM_CTLCOLORxxx以填充控件的背景.
如果您正在使用Group Boxes或TabControls来构建其他控件,那么如果使用WS_CLIPSIBLINGS,则绝对必须使Z顺序正确.
通过发送控件WM_PRINTCLIENT消息和一些子类,您可以获得绘制到DIBSection上的标准控件,然后您可以手动(或使用DWM工作器函数)修复Alpha通道,然后绘制到分层窗口或窗口带有扩展的航空玻璃.这甚至是无闪烁的,但是不支持WM_PRINTCLIENT或经常在WM_PAINT之外自行更新的控件将无法正确显示.