1

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

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

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

4

2 回答 2

3

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

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

这是一个概述:

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

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

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

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

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

于 2010-06-21T16:22:22.437 回答
0

一种方法可能是让你的“渲染窗口”和“状态栏”都是包含窗口的孩子,并为WM_SIZE包含窗口的消息添加一些代码来定位孩子,这样它们就不会重叠。

于 2010-06-20T23:04:50.503 回答