【问题标题】:Fullscreen management with WinAPI使用 WinAPI 进行全屏管理
【发布时间】: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


【解决方案1】:

这些人似乎涵盖了所有选项。

Win32: full-screen and hiding taskbar


新编辑:根据新评论,试试这个。

在您的应用程序中为该窗口捕获WM_ACTIVATE 事件。在这种情况下,请致电GetWindowPlacement Function,希望您能顺利上路。请注意底部的“SetWindowPlacement”链接。

【讨论】:

  • 感谢您的回答。它有助于。我没有最终解决方案,但链接很有用。
  • 这很有帮助。我已经在捕捉 WM_ACTIVATE 但不知道 GetWindowPlacement()。这正是我所需要的。非常感谢 JustBoo,多亏了你的帮助,我想我会成功地做我想做的事。真的很感激。
【解决方案2】:
  • 如果您是 Kiosk 应用程序,则屏幕已配置为理想/正确的分辨率。

  • 如果您不是 Kiosk 应用程序,那么您与用户分辨率无关。取而代之的是:GetSystemMetrics 获取默认显示的大小,并创建您的无边框窗口。任务栏将自动隐藏,您的应用将“全屏”。

特别是现在 LCD 面板很流行,显示分辨率必须与面板分辨率匹配,才能使亚像素抗锯齿工作 - ala ClearType。以显示分辨率正确绘制是您的应用程序的责任,而不是相反。

【讨论】:

  • 我不在 Kiosk 应用程序中,我已经使用 GetSystemMetrics() 来获取屏幕分辨率以使我的窗口全屏显示。而且我的任务栏没有问题。我的问题是,当我第二次切换应用程序时,全屏窗口不想最小化。
【解决方案3】:

不使用WS_EX_TOPMOST 试试。

当你被激活时,你会自动成为前台窗口。

【讨论】:

  • 就我而言,删除 WS_EX_TOPMOST 不会改变任何东西。第二次我想最小化它,窗口仍然在前台全屏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2021-05-12
  • 2023-03-14
  • 2014-09-04
  • 2021-07-14
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多