1.如何判断是否在authoring环境下.
STDMETHODIMP_(MoaError) MoaCreate_TStdXtra (TStdXtra FAR * This)
{
This->pCallback->QueryInterface(&IID_IMoaAppInfo,(PPMoaVoid) &This->pAppInterface));//获得IMoaAppInfo接口
This->pAppInterface->GetInfo(kMoaAppInfo_RunMode,This->XtraInfo.AppType,32);//获得运行模式,如果AppType为"Projector",则为发布模式,"Author"则为编著模式.XtraInfo是我自己定义的结构,存放初始化检测的各种信息
This->pAppInterface->GetInfo(kMoaAppInfo_ProductName, This->XtraInfo.AppName, 32);//检测软件类型,"Director"就是Director了,"Authorware"说明是运行在Authorware下.
//还可以进行用户名,版本的检测,请参考XDK说明
...
}
2.如何获取StageWindow和播放器窗口句柄.
This->pCallback->QueryInterface(&IID_IMoaMmWndWin,(PPMoaVoid) &This->pWindowInterface);//获取Windows平台下的窗口操作接口.注意这里及上面的例子中我已将这些接口声明在Xtra头文件的EXTERN_BEGIN_DEFINE_CLASS_INSTANCE_VARS(TStdXtra)宏中了.
This->pWindowInterface->WinGetParent((MoaMmHInst*)&This->XtraInfo.InstanceHandle,(MoaMmHWnd*)&This->XtraInfo.WindowHandle);//获取主程序EXE的实例句柄和窗口句柄.在编著环境下就是Director的实例句柄和窗口句柄,在Projector模式下就是Projector的实例和窗口句柄(不是Dll的句柄,在编著环境下窗口句柄不是StageWindow的句柄).该调用不可放在
STDMETHODIMP_(MoaError) MoaCreate_TStdXtra (TStdXtra FAR * This)
中检测,原因是Projector模式下xtra载入时窗口还未建立,这时是检测不到窗口的(Authorware则不同,先建立窗口再载入xtra).所以最好随用随检测.
要在编著环境下获取StageWindow句柄,还要继续遍历子窗口,找窗口类为ASISubWndClass的窗口(Director客户区窗口)下面的窗口类为ImlWinCls的子窗口,这就是StageWindow了.