最小化全屏窗口的最佳方法

Posted

技术标签:

【中文标题】最小化全屏窗口的最佳方法【英文标题】:Best Method for Minimizable Fullscreen Window 【发布时间】:2010-03-28 17:06:29 【问题描述】:

我正在用 C++ 和 Win32 编写一个短游戏,我希望能够以固定大小全屏制作它。我还希望用户能够在游戏窗口和其他窗口之间随意切换焦点,而不会出现任何奇怪的屏幕故障。

到目前为止,我知道ChangeDisplaySettings 函数并在初始化时使用WS_POPUP 样式创建窗口以使其全屏显示。要检测用户通过 alt+tab 或其他方式将焦点切换到其他窗口,我应该在窗口的 WndProc 上处理哪些消息,还是应该使用其他功能?当检测到失去焦点时,我应该只调用ChangeDisplaySettings(NULL, 0); 还是应该调用其他函数?我应该使用什么方法来处理焦点回到窗口?

还有谁能给我一些关于如何使它在不同屏幕尺寸下顺利运行的信息?

感谢您的帮助。

【问题讨论】:

全屏和“固定大小”是一种相互矛盾的要求。您想要以当前分辨率(用户选择)全屏还是更改分辨率并打开全屏窗口? 我希望窗口大小为 640x480,并在没有顶部窗口栏的全屏窗口中打开。 【参考方案1】:

如果您想要独占的全屏窗口,请使用 DirectX。

但我不推荐它。更改显示模式会导致故障、重新排列用户图标等。无论是由您完成,还是由 Direct X 完成。

宁可在您的原生资源上创建一个普通窗口,并让用户在需要时将其最大化。

【讨论】:

【参考方案2】:

您还可以使用 Windows XP(和更新版本)的 GDI+ 库来使用硬件加速拉伸(以 640x480 绘制,让 GDI+ 将其调整为原始分辨率)。那么就不需要 DirectDraw 的独占模式,也不需要 ChangeDisplaySettings。

另外,绘制到 640x480 的大背景缓冲区并通过 StretchBlt 在绘图表面上对其进行位块传输也是一种高效的解决方案。

【讨论】:

以上是关于最小化全屏窗口的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

不全屏时如何获取全屏(最小ui)视图的窗口大小?

windows 7 cmd隐藏全屏窗口

怎样用MFC去掉打开图像时窗口的最大化最小化关闭按钮,然后让图像全屏?

解决Mac下窗口无法最大化的问题 - 只有最小化和全屏怎么够

解决Mac下窗口无法最大化的问题 - 只有最小化和全屏怎么够

按啥键能使界面全屏变窗口化?