2010-08-23 49 views
2

如何在Windows的窗口上使用WinAPI来管理全屏模式?用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); 

我使用相同的功能与价值CDS_RESET把它背在“正常”模式下,当接收WM_ACTIVATE(wParam == WA_INACTIVE)

ChangeDisplaySettings(&dmScreenSettings, CDS_RESET); 

当我第一次启动我的应用程序,它是在全屏。 我使用ALT + TAB切换到我的电脑上的另一个应用程序。我的应用程序本身最小化。它运作良好。 然后,我切换回我的应用程序,并以全屏模式进入。再次,它运作良好。 但是,如果我想再次切换回另一个应用程序,我的应用程序以全屏模式运行,将所有其他应用程序隐藏在我的计算机上。

注:我的窗户是用CreateWindowEx()函数具有以下参数创建:

DWORD dwExStyle = WS_EX_TOPMOST; 
DWORD dwStyle = WS_VISIBLE | WS_POPUP; 

1)有另一种方法比使用ChangeDisplaySettings()来改变全屏模式?

2)我使用它的好价值?

3)有什么要做的,我忘了?

在此先感谢您的答案。 此致敬礼,

+0

只是为了好玩,当按键盘上的F11时会发生什么? – JustBoo 2010-08-23 17:34:11

+0

@JustBoo:什么都没有......我的目标是强制我的应用程序在全屏显示,因为它被激活。 如果我在我的应用程序启动时按F11 ...它已经在全屏显示中......所以F11键没有任何作用。 – 2010-08-23 17:37:38

+0

请参阅下面的新编辑。这应该允许您查看窗口当前处于什么状态并相应地调整(最小化)。希望。 – JustBoo 2010-08-23 17:42:47

回答

3

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

Win32: full-screen and hiding taskbar


新编辑:基于一个新的评论,试试这个。

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

+0

感谢您的回答。 它有帮助。 我没有最终的解决方案,但链接是有用的。 – 2010-08-23 17:13:08

+0

这非常有帮助。 我已经捕获了WM_ACTIVATE,但不知道GetWindowPlacement()。这正是我需要的。 非常感谢JustBoo,我想我会成功做我想做的事要感谢您的帮助。 真的很感激。 – 2010-08-23 18:29:57

0

试一下没有WS_EX_TOPMOST

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

+0

在我的情况下,删除WS_EX_TOPMOST不会改变任何东西。第二次我想将其最小化时,窗口仍然处于全屏幕的前景。 – 2010-08-23 16:49:56

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

  • 如果您不是Kiosk应用程序,那么您在用户分辨率方面没有任何业务。相反:GetSystemMetrics获取默认显示的大小,并创建非常大的无边框窗口。任务栏会自动隐藏,你的应用程序将是“全屏”。

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

+0

我不在Kiosk应用程序中,并且我已经使用GetSystemMetrics()获取屏幕分辨率,以使我的窗口全屏显示。 而且我对任务栏没有任何问题。我的问题是,当我第二次切换应用程序时,全屏窗口不希望最小化。 – 2010-08-23 17:32:10