上一篇 | 下一篇

Xtra 开发技巧心得

发布: 2007-1-25 15:55 | 作者: 斌斌 | 来源: aougu.net | 查看: 359次

1.如何判断是否在authoring环境下.
\bq$B'u
0Q0{ak k-~J} STDMETHODIMP_(MoaError) MoaCreate_TStdXtra (TStdXtra FAR * This)
e u g-t/PO9_F"S {奥古多媒体L;Ti;e E4F(wq
This->pCallback->QueryInterface(&IID_IMoaAppInfo,(PPMoaVoid) &This->pAppInterface));//获得IMoaAppInfo接口奥古多媒体,^ ~;M5D(z~
This->pAppInterface->GetInfo(kMoaAppInfo_RunMode,This->XtraInfo.AppType,32);//获得运行模式,如果AppType为"Projector",则为发布模式,"Author"则为编著模式.XtraInfo是我自己定义的结构,存放初始化检测的各种信息
fX G}(P| This->pAppInterface->GetInfo(kMoaAppInfo_ProductName, This->XtraInfo.AppName, 32);//检测软件类型,"Director"就是Director了,"Authorware"说明是运行在Authorware下.
ao/R TYN7@i //还可以进行用户名,版本的检测,请参考XDK说明
O7M2w!Jd)cn9_ ...
pk~Dg1c"f }奥古多媒体9A6I-` if
奥古多媒体+O[ vfi$N `C
2.如何获取StageWindow和播放器窗口句柄.奥古多媒体 Wf.COiu*] I
奥古多媒体b{V4E"Y&g&l
This->pCallback->QueryInterface(&IID_IMoaMmWndWin,(PPMoaVoid) &This->pWindowInterface);//获取Windows平台下的窗口操作接口.注意这里及上面的例子中我已将这些接口声明在Xtra头文件的EXTERN_BEGIN_DEFINE_CLASS_INSTANCE_VARS(TStdXtra)宏中了.
o0@4sG^8bx_RB\b This->pWindowInterface->WinGetParent((MoaMmHInst*)&This->XtraInfo.InstanceHandle,(MoaMmHWnd*)&This->XtraInfo.WindowHandle);//获取主程序EXE的实例句柄和窗口句柄.在编著环境下就是Director的实例句柄和窗口句柄,在Projector模式下就是Projector的实例和窗口句柄(不是Dll的句柄,在编著环境下窗口句柄不是StageWindow的句柄).该调用不可放在奥古多媒体7M dw ]v.?6p,e |
STDMETHODIMP_(MoaError) MoaCreate_TStdXtra (TStdXtra FAR * This)奥古多媒体r)u,g[7f8}D
中检测,原因是Projector模式下xtra载入时窗口还未建立,这时是检测不到窗口的(Authorware则不同,先建立窗口再载入xtra).所以最好随用随检测.奥古多媒体(O`CuY/T`
要在编著环境下获取StageWindow句柄,还要继续遍历子窗口,找窗口类为ASISubWndClass的窗口(Director客户区窗口)下面的窗口类为ImlWinCls的子窗口,这就是StageWindow了.奥古多媒体 { VtD \Br$oC _

_f~:u%eh 3.如何获取DLL的实例句柄奥古多媒体5MR8k%Ui

GGsu3N Xtra也是Dll,如果你要在其中用到资源或者要安装个局部钩子什么的,必须知道它,XDK将DllMain隐藏在头文件中,这在里将句柄赋给了全局变量gXtraFileRef,在要用到的文件中用extern HINSTANCE gXtraFileRef;声明一下就能用了.
/[/{.qx!E+n+C)[J H
a7{4I _s9Y0g 4. 关于播放器窗口奥古多媒体9Ciu8dmw f\L]"@j6u8S
奥古多媒体NKK2l8ZJ
在Projector模式下,看起来只有一个窗口,实际上有两个,StageWindow是一个,还有一个看不见,原因是坐标为很大的负值,在屏幕外面.这个窗口是StageWindow的Owner窗口,任务栏上的按钮就是它生成的,而不是StageWindow,这也是为什么Gray Smith的BuddyTray隐藏窗口后任务栏按钮不消失的原因.这让我想起了Delphi和C++Builder,主Form的Handle指向的不是真正的主窗口,真正的主窗口是Application->Handle指向的窗口,也是看不见的.不知道是谁偷谁的.;)

字号: | 推荐给好友

 

评分:0

我来说两句

seccode


音乐
落叶 画心 放生 天亮了 牡丹江 那滋味 擦肩而过 怀念过去 北京欢迎你 突然好想你 吻的太逼真 说好的幸福呢 坐上火车去拉萨 如果爱能早些说出来
愚爱 心碎 稻香 带我走 醉赤壁 魔杰座 我还想她 为你而活 一定要爱你 等爱的玫瑰 原谅我一次 越单纯越幸福 最后一次的温柔 给我一首歌的时间
白狐 光荣 火花 下雨天 小酒窝 樱花草 为你写诗 无可取代 无情的温柔 寂寞才说爱 忘不掉的伤 爱上你是个错 陪你一起看草原 地球人都知道我爱你
城府 假如 花海 兰亭序 爱太痛 舍不得 你若成风 女人如烟 外滩十八号 我们的纪念 摇滚怎么了 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错