Windows 用WinAPI实现全屏管理

Windows 用WinAPI实现全屏管理,windows,winapi,fullscreen,Windows,Winapi,Fullscreen,如何很好地使用WinAPI来管理windows窗口上的全屏模式 我的问题是: 我有一个应用程序,必须是全屏。 我使用带有CDS_全屏值的ChangeDisplaySettings()函数(winuser.h)在接收带有的WM_ACTIVATE时将窗口设置为全屏模式(wParam==WA_ACTIVE | | wParam==WA_CLICKACTIVE): 当接收到带有(wParam==WA_INACTIVE)的WM_ACTIVATE时,我使用与CDS_重置值相同的函数将其恢复到“正常”模式:

如何很好地使用WinAPI来管理windows窗口上的全屏模式

我的问题是:

我有一个应用程序,必须是全屏。 我使用带有CDS_全屏值的ChangeDisplaySettings()函数(winuser.h)在接收带有
WM_ACTIVATE
时将窗口设置为全屏模式(wParam==WA_ACTIVE | | wParam==WA_CLICKACTIVE)

当接收到带有
(wParam==WA_INACTIVE)
WM_ACTIVATE
时,我使用与CDS_重置值相同的函数将其恢复到“正常”模式:

当我第一次启动我的应用程序时,它是全屏的。 我使用ALT+TAB切换到计算机上的另一个应用程序。我的应用程序自动最小化。它工作得很好。 然后,我切换回我的应用程序,它以全屏模式出现。同样,它工作得很好。 但是,如果我想再次切换回另一个应用程序,我的应用程序将处于全屏模式,隐藏计算机上的所有其他应用程序

注意:我的窗口是使用CreateWindowEx()函数和以下参数创建的:

DWORD dwExStyle = WS_EX_TOPMOST;
DWORD dwStyle = WS_VISIBLE | WS_POPUP;
1) 除了使用ChangeDisplaySettings()更改全屏模式外,还有其他方法吗

2) 我是不是用它来衡量好的价值观

3) 有什么事我忘记了吗

提前感谢您的回答。 最好的祝愿,

这些家伙似乎涵盖了所有选项


新建编辑:根据新评论,尝试以下操作


在应用程序中捕获该窗口的事件。在这种情况下,打电话给医生,希望你会在路上。请注意底部的“SetWindowPlacement”链接。

在不使用
WS\u EX\u top的情况下尝试

无论何时激活,您都将自动成为前台窗口。

  • 如果您是Kiosk应用程序,那么屏幕已配置为理想/正确的分辨率

  • 如果您不是一个Kiosk应用程序,那么您与用户解析无关。取而代之的是:获取SystemMetrics以获得默认显示的大小,并创建正好如此大的无边界窗口。任务栏将自动隐藏,您的应用程序将“全屏”


尤其是现在LCD面板很流行,显示分辨率必须与面板分辨率相匹配,才能进行亚像素消除混叠-ala ClearType。您的应用程序负责以显示分辨率正确绘制,而不是相反。

在我的情况下,删除WS_EX_TOPMOST不会改变任何东西。第二次我想最小化它时,窗口仍然在前台全屏显示。谢谢你的回答。这很有帮助。我没有最终的解决方案,但链接是有用的。这是非常有用的。我已经捕捉到WM_ACTIVATE,但不知道GetWindowPlacement()。这正是我所需要的。非常感谢JustBoo,多亏了你的帮助,我想我会成功地做我想做的事。非常感谢。我不在Kiosk应用程序中,我已经使用GetSystemMetrics()获得屏幕分辨率,以便使我的窗口全屏显示。我对任务栏没有问题。我的问题是,当我第二次切换应用程序时,全屏窗口不希望最小化。只是为了好玩,当你按键盘上的F11时会发生什么?@JustBoo:什么都没有。。。我的目标是强制我的应用程序在全屏,因为它是激活的。如果我在应用程序启动时按F11。。。它已经在全屏。。。因此,F11键无效。请参见下面的“新建编辑”。这将允许您查看窗口当前处于何种状态,并相应地进行调整(最小化)。有希望地。
ChangeDisplaySettings(&dmScreenSettings, CDS_RESET);
DWORD dwExStyle = WS_EX_TOPMOST;
DWORD dwStyle = WS_VISIBLE | WS_POPUP;