【问题标题】:How to add statusbar correctly?如何正确添加状态栏?
【发布时间】:2010-02-15 20:43:46
【问题描述】:

目前它漂浮在我渲染的窗口顶部,我认为这不是很好,原因如下: 1)我浪费渲染时间来渲染不可见的东西。 2)当我无论如何都不会更新整个状态栏时,它必须每帧再次渲染。

那么我如何创建一个窗口,为我的状态栏留出空间,而我的 OpenGL 内容都不能在该区域呈现?

此时我只是调整我的视口,为状态栏创建空白空间,但这会导致我目前的做事方式出现一些问题。我必须让我的代码看起来更混乱才能让它工作。

【问题讨论】:

  • 您使用的是框架,还是严格意义上的 Win32 API?
  • 我猜是win32 API,但我也使用Visual Studio 2008。
  • 所以您使用的是原始 API 调用而不是 MFC?
  • 是的,我想是的,不知道这个 MFC 是什么或如何使用它......

标签: c++ windows visual-studio-2008 opengl statusbar


【解决方案1】:

http://www.gamedev.net/community/forums/topic.asp?topic_id=291682

编辑:这不是一个简单的问题。如果您不知道 Win32 下的子窗口是什么,那么您可能处于更好的位置。但是请人给你一个关于windows窗口系统的完整解释并不是一件容易的事。

这是一个概述:

基本上,您需要创建一个子窗口,可以使用CreateWindow 创建一个具有 WS_CHILD 样式的窗口,并将其 hWndParent 参数设置为您希望新窗口成为其子窗口的窗口句柄。

当您创建窗口时,您必须创建一个window procedure 当您从消息泵调用DispatchMessage 时(执行 Get/PeekMessage 然后分派消息的循环是消息泵)。在窗口过程中,您可以打开消息类型并处理发送到窗口的每条消息。

从这里您可以处理诸如设置之类的事情。您的初始窗口将具有WM_CREATEWM_INITDIALOG(取决于您创建的窗口类型)。您需要从那里创建子窗口(不要忘记调用ShowWindow 以使它们可见!!)。从这一点开始,您可以将 DirectX 设备设置为附加到子窗口句柄 (HWND)。

此外,如果您希望能够重新调整窗口大小,那么您还需要考虑WM_SIZE 消息。但是,我强烈建议您在开始研究之前尝试让其余部分正常工作,因为它变得非常复杂,因为您需要销毁并重新创建您的 DirectX 设备,以使其大小合适。

无论如何,这只是一个简单的概述。希望对你有帮助!

【讨论】:

  • 哦,废话,我忘了说我使用的是 OpenGL 而不是 DirectX。这有什么改变吗?这一切看起来都很复杂,在 Visual Studio 中是否有一些简单的方法可以做到这一点?
  • 在 Visual Studio 中没有简单的方法可以做到这一点,不,无论您使用的是 GL 还是 DX,这并没有太大的区别。您可能想看看 QT,因为它有一个 OpenGL 渲染器“小部件”作为其主要类型之一:)
  • Actualyl 我应该说,如果没有 Visual Studio 的付费版本,就没有简单的方法可以做到这一点......但是很多人会和我争论 MFC 的难易程度......跨度>
【解决方案2】:

一种方法可能是让您的“渲染窗口”和“状态栏”都是包含窗口的子窗口,并为包含窗口的WM_SIZE 消息添加一些代码以定位子窗口,使它们不会重叠.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多