如何正确添加状态栏?

时间:2010-02-15 20:43:47

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

目前它漂浮在我渲染的窗口之上,我不认为这样做有几个原因: 1)我浪费渲染时间来渲染不可见的东西。 2)当我不想每帧都更新整个状态栏时,它必须再次渲染每一帧。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

以下是概述:

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

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

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

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

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

答案 1 :(得分:0)

一种方法可能是使“渲染窗口”和“状态栏”成为包含窗口的两个子项,并为包含窗口的WM_SIZE消息添加一些代码,以便定位孩子以便他们不要重叠。