欢迎来到天天文库
浏览记录
ID:39464839
大小:64.00 KB
页数:7页
时间:2019-07-03
《Authorware的内部消息接口》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Authorware的内部消息接口首先的问题是:我们作的UCD常常在运行期需要创建对象,尤其是对于象dephi这样的开发语言来说,它从运行到消灭的过程中完完全全是依靠创建对象来实现的。在dephi程序中,我们无需担心创建的对象会因为无法及时消灭而出现非法操作,除非是在运行期动态创建的对象。当我们关闭一个程序时,dephi会自动从内存中释放该对象所占内存空间,不会导致该内寸会造成永久性丢失。但是如果把对象编译进dll程序中,对象就一定是动态创建的,必须在程序退出前释放该对象,否则会出现非法操作的标示。某个有名的UCD中的MP3播放
2、函数就存在这样的问题:必须要求用户执行释放对象的函数才能正常退出,如果用户是使用windows窗口的系统菜单退出的话,则非法操作不可避免,从另一方面来说,一个好的软件是应该充分考虑到用户操作过程中可能出现的种种问题,我们只能给他们提供方便而不是给他们添加麻烦,对于一个商业化的软件这是基本原则。现在的问题是:我们如何知道用户什么时候关闭程序,也就是需要抓住释放对象的机会。当然,制作一个系统钩子函数能够解决这个问题。然而,authorware同样给了程序员一个机会,这就是authorware中的对象消息。要使我们的对象能够接收aut
3、horware的内部消息,我们第一步就需要把我们的对象加入到authorware的显示对象列表中去。Authorware的显示对象列表是个抽象的概念,它向每个登记到列表中的对象发布消息,我们就可以根据具体的消息来处理。加入对象到显示列表的命令是通过windowsapi函数sendmessage来实现的,函数描述如下:id=SendMessage(pwHandle,APWC_POST,0,lpPostPB)参数描述pwHandleAuthorware窗口句柄lpPostPB指向一个APWC_POSTPB参数块的远指针APWC_PO
4、ST这条消息就是告诉authorware我要加入一个对象。(其值为常数:$6000)返回值>0:返回该对象的唯一标示号.0:无法加载对象过程.-1在dll中的对象过程未找到.-2:非法内存.-3:参数错误.lpPostPB变量结构描述如下:typeAPWC_POSTPB=recordsize:Word;//该结构的长度dll_ptr:PChar;//加载的dll文件名称function_ptr:PChar;//对象过程函数名称rect:TRECT;//对象接收消息的区域port:Integer;//接收消息方式data_ptr:
5、longint;//对象携带私有数据结构指针data_size:Word;//对象携带私有数据长度name_ptr:PChar;//对象变量名end{APWC_POSTPB};FAR=APWC_POSTPB;APWC_POSTPB_PTR=^APWC_POSTPB;说明:其中如果没有私有数据,data_ptr和data_size可设为零对象过程函数名必须是用exports导出的函数port可取以下三个常量之一:STATIC_PORT=0;//适用于基本固定的对象,大多数情况下选它MOTION_PORT=1;//适用于更新频率较快
6、的对象SCREEN_PORT=2;//适用于直接画屏的对象,如果对象是动画之类就选它RECT是一个在authorware的窗口内定义的区域,如果你需要接收象鼠标消息这样的消息,则只在该区域你才能接收二创建对象过程函数在登记对象之后,authorware就向我门定义的对象过程发送消息,我们根据具体的消息,就实现了控制我们对象。对象过程函数格式:opjiectProc(awparam:APWN_AB;msg:NOTIFICATION_MESSAGE):Boolean;参数说明:awparam:在我们创建对象过程中定义的指向APWN_
7、AB结构的指针APWN_AB结构声明如下:typeAPWN_AB=recordsize:Word;//该结构的长度id:LongInt;//分配给对象的唯一标示号icon_id:Integer;//创建该对象所在图标,通常是使用计算图标//的地方display:HWND;//authorware主窗口句柄wparam:WPARAM;//msg的第一参数lparam:LPARAM;//msg的第二参数rect:TRECT;//由APWC_POSTPB参数传递过来data_ptr:longint;//由APWC_POSTPB参数传递
8、过来data_size:Word;//由APWC_POSTPB参数传递过来name_ptr:PChar;//由APWC_POSTPB参数传递过来end{APWN_AB};FAR=APWN_AB;//声明作为远指针调用(其实在现在32位操作//系统下已无必要,可删
此文档下载收益归作者所有