Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ WS_EX_分层、不可见的窗口,以及新安装的Windows_Visual C++_Windows 7_Mfc_Aero_Ws Ex Layered - Fatal编程技术网

Visual c++ WS_EX_分层、不可见的窗口,以及新安装的Windows

Visual c++ WS_EX_分层、不可见的窗口,以及新安装的Windows,visual-c++,windows-7,mfc,aero,ws-ex-layered,Visual C++,Windows 7,Mfc,Aero,Ws Ex Layered,我想与大家分享这篇文章,因为我浪费了很多时间来理解为什么WS_EX_分层标志在新安装的Windows上不起作用(我的测试是在Win7上进行的,我不知道它是否可以在Win8操作系统上复制) 这是我的密码: ... hParentWindow=hWnd; HWND myWnd=CreateWindowEx(WS_EX_LAYERED|WS_EX_PALETTEWINDOW,_T("STATIC"),_T(""), WS_POPUP|SS_BITMAP,position.left,position.

我想与大家分享这篇文章,因为我浪费了很多时间来理解为什么WS_EX_分层标志在新安装的Windows上不起作用(我的测试是在Win7上进行的,我不知道它是否可以在Win8操作系统上复制)

这是我的密码:

...

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标志应该已经起作用了


为什么?

在花了将近一天的时间搜索解决方案后,我发现目标PC(承载可执行文件的PC)禁用了Aero Peek主题,因为它从未运行过“性能信息和工具”

因此,IMHO,一个将要使用代码中分层的WS_EX_的程序员,必须确定Aero Peek是否打开(例如通过查看
\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
注册表并检查EnableReoPeek注册表值),否则,某些窗口无法在任何PC中正确显示


希望这能让你节省时间

在花了将近一天的时间搜索解决方案后,我发现目标PC(承载可执行文件的PC)禁用了Aero Peek主题,因为它从未运行过“性能信息和工具”

因此,IMHO,一个将要使用代码中分层的WS_EX_的程序员,必须确定Aero Peek是否打开(例如通过查看
\HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
注册表并检查EnableReoPeek注册表值),否则,某些窗口无法在任何PC中正确显示


希望这能让你节省时间

我今天也经历过同样的问题(罗萨里奥,我感觉到你两年前的痛苦!)

我不明白为什么窗户会完全消失。我相信其他人也会因为同样的原因出现在这个页面上

因此,我想抓住一点

关键因素似乎是“桌面窗口管理器会话管理器”服务必须运行,透明层才能正常工作

EnableAeroPeek注册表值与您在浏览窗口时是否看到窗口的全屏预览有关(例如,使用alt TAB或将鼠标悬停在task manager迷你预览上),该值可以保持关闭状态,并且与我在多台计算机上执行的测试中的透明度可用性无关

类似地,如果该注册表设置处于打开状态,但DWMSM服务处于关闭状态,则不会提供透明度

罗萨里奥我很抱歉反驳你对自己问题的回答,但我认为这是一个重要的区别


到目前为止,在进行失败(或使窗口不可见)的调用之前,在Windows 7及更高版本上测试透明度可用性的唯一方法似乎是检查正在运行的dwm.exe进程。

我今天也遇到了同样的问题(Rosario我感觉到了你两年前的痛苦!)

我不明白为什么窗户会完全消失。我相信其他人也会因为同样的原因出现在这个页面上

因此,我想抓住一点

关键因素似乎是“桌面窗口管理器会话管理器”服务必须运行,透明层才能正常工作

EnableAeroPeek注册表值与您在浏览窗口时是否看到窗口的全屏预览有关(例如,使用alt TAB或将鼠标悬停在task manager迷你预览上),该值可以保持关闭状态,并且与我在多台计算机上执行的测试中的透明度可用性无关

类似地,如果该注册表设置处于打开状态,但DWMSM服务处于关闭状态,则不会提供透明度

罗萨里奥我很抱歉反驳你对自己问题的回答,但我认为这是一个重要的区别


到目前为止,在进行失败(或使窗口不可见)的呼叫之前,在Windows 7及更高版本上测试透明度可用性的唯一方法似乎是检查正在运行的dwm.exe进程。

抱歉,我编辑了我自己的问题并添加了我的答案。非常好,感谢您的努力。抱歉,我编辑了我自己的问题并添加了我的答案。太好了,谢谢你的努力。