如何正确添加状态栏?

问题描述:

目前它浮在我的渲染窗口之上,我不认为这很好,原因如下: 1)我浪费渲染时间来渲染不可见的东西。 2)它必须再次渲染每一帧时,我不会更新整个状态栏反正每帧。如何正确添加状态栏?

那么,我怎么能创建一个窗口,它为我的状态栏留下空间,并且我的OpenGL的东西都不会呈现在该区域中?

在这一刻,我只是调整我的视口的方式,为状态栏创建空的空间,但它导致我目前的做事方式的一些问题。我将不得不让我的代码看起来更加混乱才能使其工作。

+0

您是使用框架还是严格使用Win32 API? – 2010-02-15 20:51:31

+0

win32 API我猜,但我也使用Visual Studio 2008。 – Newbie 2010-02-15 21:57:50

+0

所以你使用原始的API调用,而不是MFC? – Johnsyweb 2010-06-03 14:04:42

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设备,使其尺寸合适。

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

+0

哦,废话,我忘了说我正在使用OpenGL而不是DirectX。这会改变什么吗?这一切似乎都很复杂,有没有在Visual Studio中做这件事的一些简单方法? – Newbie 2010-06-22 15:07:37

+0

在Visual Studio中没有简单的方法,不管它是否使用GL而不是DX都没有太大的区别。你可能想看看QT,因为它有一个OpenGL渲染器“小部件”作为其主要类型之一:) – Goz 2010-06-22 15:29:47

+0

Actualyl我应该说没有一个简单的方法来做到这一点没有付费的版本的Visual Studio ...但随后很多人会和我一起讨论MFC是如此简单或困难的... – Goz 2010-06-23 17:54:56

一种方法可能是让您的“渲染窗口”和“状态栏”同时包含一个包含窗口的子项,并为包含窗口的WM_SIZE消息添加一些代码以定位子项以避免重叠。

+0

是的,怎么样?例?教程?什么! – Newbie 2010-06-21 09:19:23