visual-c++ - WS_EX_LAYERED、不可见窗口和全新安装的 Windows

标签 visual-c++ windows-7 mfc aero ws-ex-layered

我想和你分享这篇文章,因为我浪费了很多时间来理解为什么 WS_EX_LAYERED 标志在全新安装的 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(托管可执行文件的那台)禁用了 Aero Peek 主题,因为它从未运行过“性能信息和工具”!

因此,恕我直言,打算在其代码中使用 WS_EX_LAYERED 的程序员必须确定 Aero Peek 是否已打开(例如,通过查看 \HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM 注册表并检查 EnableAreoPeek 注册表值),否则某些窗口无法在任何 PC 上正确显示。

希望这能让您节省时间!

关于visual-c++ - WS_EX_LAYERED、不可见窗口和全新安装的 Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19951379/

相关文章:

http - BitsTransfer 不适用于在 Windows 7 上使用 http 或 https 的 megatools

Delphi:如何在外部应用程序上正确使用ShowWindow

C++ MFC 属性并获取选中的子项

c++ - 调试断言失败,表达式:(unsigned)(c +1)<= 256提问c++

c++ - 为什么编译器不将此标记为错误而不是警告?

c++ - MS Visual Studio 2012 Express 是否同时包含 C#、Visual Basic、C++?

c++ - Linux下的MFC头文件g++ : expected ‘{’ before ‘<’ token

c - LoadLibrary() 一个 EXE?

c++ - Windows 应用程序以非管理员身份运行时看到文件的旧版本而不是当前版本

c++ - 如何检测无模式 CDialog 是否已关闭?