【发布时间】:2011-04-02 17:24:23
【问题描述】:
如何使用WinAPI管理windows窗口的全屏模式?
这是我的问题:
我有一个必须全屏显示的应用程序。
当收到带有(wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE) 的WM_ACTIVATE 时,我使用带有CDS_FULLSCREEN 值的ChangeDisplaySettings() 函数(winuser.h) 将我的窗口置于全屏模式:
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) 的WM_ACTIVATE 时,我使用与CDS_RESET 值相同的函数将其恢复为“正常”模式:
ChangeDisplaySettings(&dmScreenSettings, CDS_RESET);
当我第一次启动我的应用程序时,它是全屏的。 我使用 ALT+TAB 切换到我计算机上的另一个应用程序。我的应用程序最小化了自己。它运作良好。 然后,我切换回我的应用程序,它以全屏模式出现。再次,它运作良好。 但是,如果我想再次切换回另一个应用程序,我的应用程序将处于全屏模式,将所有其他应用程序隐藏在我的计算机上。
注意:我的窗口是使用带有以下参数的 CreateWindowEx() 函数创建的:
DWORD dwExStyle = WS_EX_TOPMOST;
DWORD dwStyle = WS_VISIBLE | WS_POPUP;
1) 除了使用 ChangeDisplaySettings() 来更改全屏模式之外,还有其他方法吗?
2) 我是否使用了良好的价值观?
3) 有什么事情我忘记了吗?
提前感谢您的所有回答。 最好的问候,
【问题讨论】:
-
只是为了好玩,当您按键盘上的 F11 时会发生什么?
-
@JustBoo :什么都没有......我的目标是强制我的应用程序在激活后处于全屏状态。如果我在我的应用程序启动时按 F11... 它已经在全屏... 所以 F11 键无效。
-
见下面的新编辑。这应该允许您查看窗口当前处于什么状态并相应地调整(最小化)。希望。
标签: windows winapi fullscreen