目前它漂浮在渲染窗口的顶部,我认为这并不好,原因有几个: 1)我浪费渲染时间来渲染不可见的东西。2)当我不会每一帧都更新整个状态栏时,它必须在每一帧都重新渲染。
那么,我如何创建一个窗口,让它为我的状态栏留出空间,并且我的OpenGL内容都不能在该区域中呈现呢?
此时,我只是调整了我的视窗,为statusbar创建了空白空间,但这会在我当前的操作方式中造成一些问题。我必须让我的代码看起来更加凌乱,才能让它工作。
发布于 2010-06-22 00:22:22
http://www.gamedev.net/community/forums/topic.asp?topic_id=291682
编辑:这不是一个要回答的简单问题。如果你不知道Win32下的子窗口是什么,那么你可能处于一个更好的位置。然而,让别人给你一个完整的windows窗口系统的解释可不是件容易的事。
以下是一个概述:
基本上,您需要创建子窗口,这可以使用CreateWindow创建一个具有WS_CHILD样式的窗口,并将其hWndParent参数设置为您希望新窗口成为其子窗口的窗口句柄。
当您创建窗口时,当您从消息泵调用DispatchMessage时,您必须创建一个window procedure (执行Get/PeekMessage然后分派消息的循环是消息泵)。在窗口过程中,您可以打开消息类型并处理发送到窗口的每条消息。
从这里你可以处理像设置这样的事情。初始窗口将具有WM_CREATE或WM_INITDIALOG (取决于您创建的窗口类型)。您需要从那里创建子窗口(不要忘记调用ShowWindow。然后,您可以将DirectX设备设置为附加到子窗口句柄(HWND)。
此外,如果您希望能够调整窗口大小,则还需要考虑WM_SIZE消息。然而,我强烈建议在开始研究这个问题之前,尝试让其余部分工作,因为它变得非常复杂,因为您将需要销毁并重新创建DirectX设备,以使其大小合适。
无论如何,这只是一个简单的概述。我希望它能有所帮助!
发布于 2010-06-21 07:04:51
一种方法是使您的“呈现窗口”和“状态栏”都是包含窗口的子级,并为该包含窗口的WM_SIZE消息添加一些代码,以定位这些子级,使它们不会重叠。
https://stackoverflow.com/questions/2268762
复制相似问题