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

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

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

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

感谢您的帮助。

【问题讨论】:

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

标签: c++ winapi


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多