使用WinAPI进行全屏管理

时间:2010-08-23 15:38:41

标签: windows winapi fullscreen

如何在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)有什么可以做的,我忘记了吗?

提前感谢您的所有答案。 最好的问候,

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。您的应用程序有责任以显示分辨率正确绘制,而不是相反。