如何在Windows窗口中使用WinAPI来管理全屏模式?
这是我的问题:
我有一个必须全屏的应用程序。
我使用带有CDS_FULLSCREEN值的ChangeDisplaySettings()函数(winuser.h)在我的WM_ACTIVATE
(wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE)
收到DEVMODE dmScreenSettings;
memset (&dmScreenSettings, 0, sizeof (dmScreenSettings));
dmScreenSettings.dmSize = sizeof (dmScreenSettings);
dmScreenSettings.dmPelsWidth = 1280;
dmScreenSettings.dmPelsHeight = 720;
dmScreenSettings.dmBitsPerPel = 32;
dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
时将我的窗口设置为全屏模式:
WM_ACTIVATE
在使用(wParam == WA_INACTIVE)
收到ChangeDisplaySettings(&dmScreenSettings, CDS_RESET);
时,我使用与CDS_RESET值相同的函数将其恢复为“正常”模式:
DWORD dwExStyle = WS_EX_TOPMOST;
DWORD dwStyle = WS_VISIBLE | WS_POPUP;
当我第一次启动我的应用程序时,它是全屏显示的。 我使用ALT + TAB切换到我的计算机上的另一个应用程序。我的应用程序最小化了它运作良好。 然后,我切换回我的应用程序,它以全屏模式启动。再次,它运作良好。 但是,如果我想再次切换回另一个应用程序,我的应用程序将以全屏模式进行控制,将所有其他应用程序隐藏在我的计算机上。
注意:我的窗口是使用CreateWindowEx()函数创建的,其中包含以下参数:
{{1}}
1)除了使用ChangeDisplaySettings()更改全屏模式之外还有其他方法吗?
2)我使用它的好价值吗?
3)有什么可以做的,我忘记了吗?
提前感谢您的所有答案。 最好的问候,
答案 0 :(得分:4)
这些家伙似乎涵盖了所有选项。
Win32: full-screen and hiding taskbar
新修改:根据新评论,试试这个。
在您的应用中捕获该窗口的WM_ACTIVATE事件。在那种情况下,请致电GetWindowPlacement Function,希望您将在途中。请注意底部“SetWindowPlacement”的链接。
答案 1 :(得分:0)
不用WS_EX_TOPMOST
尝试。
每当您激活时,您将自动成为前景窗口。
答案 2 :(得分:-4)
如果您是Kiosk应用程序,则屏幕已配置为理想/正确的分辨率。
如果您不是Kiosk应用程序,那么您在用户解析方面没有任何业务。相反:GetSystemMetrics获取默认显示的大小,并创建那么大的无边框窗口。任务栏将自动隐藏,您的应用将“全屏”。
特别是现在LCD面板很受欢迎,显示分辨率必须与面板分辨率相匹配才能使子像素抗锯齿工作 - ala ClearType。您的应用程序有责任以显示分辨率正确绘制,而不是相反。