HGE в дочернем окне
Запуск HGE в дочернем окне управляемом приложением Windows может быть полезно,
когда создаешь внешние инструменты, или элементы управления ActiveX, или когда происходит интеграция
HGE в сторонние IDE (интегрированная среда разработки). Далее следуют указания, как это
следует делать.
Создание дочернего окна HGE
Чтобы запустить HGE в режиме дочернего окна, необходимо просто указать идентификатор
(handle) родительского окна. Чтобы это сделать, установите перменную системы HGE_HWNDPARENT
перед вызовом System_Initiate:
hge->System_SetState(HGE_HWNDPARENT, (int)hwnd);
Курсор мыши
Возможно вы предпочитаете, чтобы HGE пользовался стандартным курсором Windows в режиме
дочернего окна. Этого можно добиться установив переменную системы HGE_HIDEMOUSE
в значение false:
hge->System_SetState(HGE_HIDEMOUSE, false);
Обработка сообщений приложения и выполнения функции кадра
Чтобы добавить дополнительную гибкость функция System_Start
ведет себе немного подругому в режиме дочернего окна. Во-первых, она возвращается после одного
вызова пользовательской функции кадра, в зависимости от значение, которое она вернет. Во-вторых, она
не обрабатывает оконных сообщений. Поэтому вам придется самостоятельно организовать цикл обработки
сообщений. Вот простой пример, досточный для правильного запуска HGE:
for(;;)
{
if(hge->System_GetState(HGE_HWND).int_value)
hge->System_Start();
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(msg.message == WM_QUIT) break;
DispatchMessage(&msg);
}
}
Обработка сообщения WM_PAINT
По умолчанию, HGE не обновляет свое окно по сообщению WM_PAINT, так как для простоты, оно
совмещает обновление/отрисовку кадра. Вы можете выделить код отрисовки в отдельную функцию и
вызывать ее как из функции кадра, так и по сообщению WM_PAINT, чтобы окно лучше выглядело
во время перемещения и изменения размеров:
case WM_PAINT:
RenderHGEGame();
break; // pass to default window proc
Перемещение и изменение размеров окна HGE
Вы можете двигать и изменять размеры окна HGE посредствам функций WinAPI, таких как MoveWindow.
Когда его окно меняет размер, HGE переиницилизирует DirectX, чтобы учесть новые значения:
MoveWindow((HWND)(hge->System_GetState(HGE_HWND).int_value),
x, y, width, height, true);
Закрытие окна HGE
С окном HGE связано много ресурсов. Поэтому необходимо использовать функцию System_Shutdown
для их освобождения, не полагайтесь просто на функцию разрушения окна. Хорошее место для ее вызова -
обработчик сообщения WM_DESTROY родительского окна:
case WM_DESTROY:
FreeLoadedHGEResources();
hge->System_Shutdown();
PostQuitMessage(0);
return FALSE;
Ограничения на дочернее окно
1. Чтобы принять события от клавиатуры в режиме дочернего окна HGE
должна иметь фокус ввода. Она получает его автоматически когда вы щелкаете мышкой куда-нибудь внутрь
окна. Чтобы явно установить фокус, используйте следующий вызов:
SetFocus((HWND)(hge->System_GetState(HGE_HWND).int_value));
2. Переключение в полноэкранный режим недоступно в режиме дочернего окна. Согласно переменной
системы HGE_WINDOWED, HGE
будет работать в оконном режиме.
|