2010-02-15 2 views
1

В настоящее время он плавает поверх моего визуализированного окна, я не думаю, что это хорошо по нескольким причинам: 1) Я теряю время рендеринга для рендеринга, который не виден. 2) он должен быть визуализирован каждый кадр снова, когда я бы не обновлял всю строку состояния каждый кадр в любом случае.Как правильно добавить строку состояния?

Итак, как я мог создать окно, в котором он покидает пространство для моей панели состояния, и ни один из моих материалов OpenGL не может быть отображен в этой области?

В данный момент я просто настраиваю свои видовые экраны таким образом, чтобы создать пустое пространство для строки состояния, но это вызывает некоторые проблемы в моем текущем способе делать что-то. я должен был бы заставить мой код выглядеть намного более грязным, чтобы заставить его работать.

+0

Вы используете фреймворк или строго Win32 API? –

+0

win32 API, я думаю, но я тоже использую Visual Studio 2008. – Newbie

+0

Итак, вы используете необработанные вызовы API, а не MFC? – Johnsyweb

ответ

2

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

Edit: Это не простой вопрос. Если вы не знаете, какое дочернее окно находится под Win32, вы можете оказаться в гораздо лучшем положении. Однако просить кого-нибудь дать вам полное объяснение системы оконного окна - это не подлый подвиг.

Вот обзор:

В основном вам нужно создать дочернее окно, которое может быть сделано с помощью CreateWindow создать окно со стилем WS_CHILD и с его параметром hWndParent, установленным на оконной ручке вы хотите новое окно быть ребенком.

При создании окна вы будете иметь, обязательно, создать window procedure При вызове DispatchMessage из вашего сообщения насоса (The Loop, который делает Get/PeekMessage, а затем отправляет сообщения в сообщении насос). Внутри процедуры окна вы можете включить тип сообщения и обработать каждое сообщение, отправленное в ваше окно.

Здесь вы можете обрабатывать такие вещи, как настройка. В вашем начальном окне будет либо WM_CREATE, либо WM_INITDIALOG (в зависимости от того, какой тип окна вы создаете). Именно оттуда вам нужно создать дочерние окна (не забудьте позвонить ShowWindow, чтобы они были видны!). С этого момента вы можете настроить устройство DirectX для прикрепления к дескриптору дочернего окна (HWND).

Кроме того, если вы хотите, чтобы иметь возможность изменить размер окна, вам также необходимо учитывать дело WM_SIZE. Однако я бы настоятельно рекомендовал, чтобы все остальное работало, даже начиная изучать это, поскольку оно становится очень сложным, так как вам нужно будет уничтожить и воссоздать устройство DirectX так, чтобы оно было правильным.

В любом случае это простой обзор. Я надеюсь, что это помогает!

+0

О, дерьмо, я забыл сказать, что я использую OpenGL, а не DirectX. это что-то меняет? все это кажется довольно сложным, есть ли простой способ сделать это в Visual Studio? – Newbie

+0

В Visual Studio нет простого способа сделать это, и не имеет большого значения, используете ли вы GL, а не DX.Вы можете взглянуть на QT, поскольку у него есть «виджет» рендеринга OpenGL как один из его основных типов: – Goz

+0

Actualyl Я должен сказать, что нет простого способа сделать это без заплаченной версии Visual Studio ... но потом многие спорят со мной о том, насколько легко или сложно MFC ... – Goz

0

Одним из способов может быть создание «визуализированного окна» и «статусной строки» обоих дочерних элементов содержащего окна, а также добавить код для сообщения WM_SIZE для окна, содержащего окно, чтобы разместить их, чтобы они не перекрывались.

+0

да, как? пример? учебники? что-нибудь! – Newbie