C++ 如何正确添加状态栏?

C++ 如何正确添加状态栏?,c++,windows,visual-studio-2008,opengl,statusbar,C++,Windows,Visual Studio 2008,Opengl,Statusbar,目前它漂浮在渲染窗口的顶部,我认为这不好,原因如下: 1) 我浪费渲染时间渲染不可见的东西。 2) 它必须在每一帧重新渲染,而我无论如何都不会在每一帧更新整个状态栏 那么,我怎样才能创建一个窗口,让它为我的状态栏留出空间,而我的OpenGL内容都不能在该区域渲染呢 此时,我只是调整视口,为状态栏创建空白空间,但这会导致我当前的操作方式出现一些问题。我必须使我的代码看起来更混乱才能正常工作。一种方法可能是使您的“渲染窗口”和“状态栏”都是包含窗口的子窗口,并为包含窗口的WM\u SIZE消息添加一

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

那么,我怎样才能创建一个窗口,让它为我的状态栏留出空间,而我的OpenGL内容都不能在该区域渲染呢


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

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

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

以下是概述:

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

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

从这里您可以处理设置之类的事情。初始窗口将具有或(取决于您创建的窗口类型)。您需要从那里创建子窗口(别忘了调用以使它们可见!!)。从这一点上,您可以将DirectX设备设置为连接到子窗口句柄(HWND)

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


总之,这只是一个简单的概述。我希望有帮助

你使用的是框架,还是严格意义上的Win32 API?我猜是Win32 API,但我也使用Visual Studio 2008。所以你使用的是原始API调用而不是MFC?是的,我想是的,不确定这个MFC是什么或者如何使用它…哦,废话,我忘了说我使用的是OpenGL而不是DirectX。这会改变什么吗?这一切看起来都很复杂,在VisualStudio中是否有一些简单的方法可以做到这一点?在VisualStudio中没有简单的方法可以做到这一点,而且无论您使用的是GL还是DX,都没有多大区别。您可能想看看QT,因为它有一个OpenGL渲染器“小部件”作为其主要类型之一:)实际上,我应该说,如果没有付费版本的Visual Studio,就没有简单的方法来实现它。。。但是很多人会和我争论MFC有多容易或难。。。