我想和大家分享这篇文章,因为我浪费了很多时间来理解为什么WS_EX_LAYERED标志不能在新安装的Win7上工作(我的测试是在Win7上,我不知道它是否可以在Win8 o.s上复制)。
这是我的密码:
...
hParentWindow=hWnd;
HWND myWnd=CreateWindowEx(WS_EX_LAYERED|WS_EX_PALETTEWINDOW,_T("STATIC"),_T(""), WS_POPUP|SS_BITMAP,position.left,position.top, position.right, position.bottom,hWnd,NULL,hInst,NULL);然后我想添加一个透明的图层:
CWnd::FromHandle(myWnd)->SetLayeredWindowAttributes(RGB(0,0,0), 255*0.6, LWA_ALPHA);运行代码,窗口就不会出现!而且这不是一个子窗口( WS_EX_LAYERED不适用于子窗口),所以WS_EX_LAYERED标志应该已经工作了。
为什么?
发布于 2016-01-08 19:26:31
我今天也经历过同样的事情(罗萨里奥,我感觉到你2年前的痛苦!)
我不明白为什么窗户会完全消失。我相信其他人也会因为同样的原因而出现在这个页面上。
因此,我想谈一谈一点。
关键因素似乎是“桌面窗口管理器会话管理器”服务必须运行透明层才能工作。
该EnableAeroPeek注册表值,它与您在查看窗口时是否看到了全屏预览有关(例如。随着alt-TAB或徘徊在任务管理器迷你预览),可以保持关闭,它与透明度的可用性,我已经在多台机器上进行的测试。
类似地,如果该注册表设置是打开的,但DWMSM服务处于关闭状态,则不会为您提供透明度。
罗萨里奥我很抱歉与你自己的问题相矛盾,但我认为这是一个重要的区别!
到目前为止,在进行调用失败(或使窗口不可见)之前,测试Windows 7上透明度可用性的唯一方法似乎是检查正在运行的dwm.exe进程。
https://stackoverflow.com/questions/19951379
复制相似问题