HGE in a child window

Running HGE in a child window hosted by a Windows application may be useful to create authoring tools and ActiveX controls or to integrate HGE into a third party IDE. Here follow the guidelines how to do that.

Creating HGE window as a child

To run HGE in a child window mode you should just specify the parent window handle. To do this set HGE_HWNDPARENT system state before calling to System_Initiate:

hge->System_SetState(HGE_HWNDPARENT, hwnd);

Mouse cursor

You may prefer HGE to use standard Windows cursor while in child window mode. This can be done by setting HGE_HIDEMOUSE system state to false:

hge->System_SetState(HGE_HIDEMOUSE, false);

Dispatching application's messages and running Frame Function

To provide additional flexibility System_Start behaves a bit differently in child window mode. First, it returns after just one call to user's frame function regardless of the value returned by it. Second, it doesn't dispatch window messages. So you should set up your own message processing loop. Here's the simpliest loop enough to run HGE properly:

for(;;)
{
  if(hge->System_GetState(HGE_HWND))
    hge->System_Start();

  if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
    if(msg.message == WM_QUIT) break;
    DispatchMessage(&msg);
  }
}

Moving and resizing HGE window

You can move and resize HGE window with WinAPI functions like MoveWindow. When it's window resized, HGE will reinitiate DirectX to meet new window dimensions:

MoveWindow(hge->System_GetState(HGE_HWND),
           x, y, width, height, true);

Destroying HGE window

HGE has lots of resources associated with it's window. So you should use System_Shutdown call to free them, don't rely on just destroying the window. The good place to do this is WM_DESTROY handler of the parent window:

case WM_DESTROY:
    FreeLoadedHGEResources();
    hge->System_Shutdown();
    PostQuitMessage(0);
    return FALSE;

Child window mode limitations

1. To accept keyboard events in child window mode HGE window must have input focus. It gains focus automatically when you click somewhere inside. Use the following call to set the focus explicitly:

SetFocus(hge->System_GetState(HGE_HWND));

2. Switching into fullscreen is unavailable when running in child window mode. Regardless of HGE_WINDOWED system state HGE will run in a window.

时间: 2024-10-30 15:23:50

HGE in a child window的相关文章

JavaScript—window对象使用示例

 window对象是JavaScript浏览器对象模型中的顶层对象,其包含多个常用方法和属性,下面为大家介绍下window对象的使用 window对象是JavaScript浏览器对象模型中的顶层对象,包含多个常用方法和属性:    1 打开新窗口  代码如下: window.open(pageURL,name,parameters)    其中:    pageURL为子窗口路径    name为子窗口句柄    parameters为窗口参数(各参数用逗号分隔)    如:  代码如下: wi

JavaScript—window对象使用示例_基础知识

window对象是JavaScript浏览器对象模型中的顶层对象,包含多个常用方法和属性: 1 打开新窗口 复制代码 代码如下: window.open(pageURL,name,parameters) 其中: pageURL为子窗口路径 name为子窗口句柄 parameters为窗口参数(各参数用逗号分隔) 如: 复制代码 代码如下: window.open("http://www.cnblogs.com/zhouhb/","open",'height=100,

【JavaScript】window对象属性

window对象-属性 closed属性:表示对应的window对象的窗口是否关闭. 返回true表示窗口已经被关闭,返回false表示窗口没 有被关闭. opener属性:返回打开当前窗口的window对象. defaultstatus属性:用于设置和返回窗口状态栏中缺省 显示的文本内容. 也就是在没有任何操作的情况下状态 栏中所显示的文本内容. status属性:它设置和返回窗口状态栏中当前正在显示的 文本内容. screenTop属性:返回窗口左上角顶点在屏幕上的垂直位置. screenL

js-怎么在父页面修改二级子页面元素样式

问题描述 怎么在父页面修改二级子页面元素样式 我在父页面iframe了一个子页面.在子页面又Iframe了一个子页面,怎么在第一个父页面里修改最后一个子页面里元素的样式啊? 解决方案 iframe和父页,window.open打开页面之间的引用 解决方案二: ? String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+"

全面剖析VB.NET(1)

 前言    大约到2001年的第4季度,Visual Basic的下一个版本Visual Basic.NET将会正式发行.新版的Visual Basic.NET拥有许多VB开发者以前只能梦想的新功能和新特色.同时,成长和发展也意味着付出一定的代价,新的Visual Basic.NET中有许多东西需要重新学习,一些细微的变化很可能带来出乎意料的麻烦.       Microsoft .NET平台所包含的内容非常广泛.本文将去粗存精,对VB.NET作一个全景式的介绍,看看它到底是什么,有些什么用处

英文版的Visual Studio.Net 2003 快捷键!

visual Visual Studio.Net 2003 Shortcut Keys Shortcut Key Description Project Shortcut Key Build.BuildSolution CTRL + SHIFT + B Builds the solution Build.Compile CTRL + F7 Creates an object file containing machine code, linker directives, sections, ex

一份ASP学习笔记(连载)

笔记 ASP学习笔记(一) 1. 突出显示文字 <em>要显示的文字</em>2. 根据用户选择,做出相应的反应(在客户端实现) SELECT CASE Document.Form1.card.options(selectedIndex).Text Case "value1" Option1 Case "value2" Option2 ...... END SELECT3. VBScript 的 Sub函数不返回值 Function 函数将返

走近VB.Net(一),VB中的族,类,对象(摘录部分MSDN)

对象 走近VB.Net(一),VB中的族,类,对象 VB.Net是面向对象(object-oriented)的,又称为物件(object)导向(oriented).在VB.Net中所有的变量类型都是基于object,而不是VariantDim x As Variant 会被升级为 Dim as object.如果你不理解对象,暂时你可以把他理解为一段数据,他是实际存在于内存的,所以对象以称为实例(instance)而类(class)就是类别,他定义一群对象,是一个对象的群体,并定义方法成员.所以

编写一个类Spy++的搜索窗口程序

大家都用过Vc自代的工具Spy++,它可以通过鼠标来捕捉窗口,得到窗口的信息. 在MSDN里面找到了一个相关的API:RealChildWindowFromPoint: HWND RealChildWindowFromPoint( HWND hwndParent, // handle to window POINT ptParentClientCoords // client coordinates ); The RealChildWindowFromPoint function retriev