- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Authorware的内部消息接口
Authorware的内部消息接口
首先的问题是:我们作的UCD常常在运行期需要创建对象,尤其是对于象dephi这样的开发语言来说,它从运行到消灭的过程中完完全全是依靠创建对象来实现的。在dephi
程序中,我们无需担心创建的对象会因为无法及时消灭而出现非法操作,除非是在运行期动态创建的对象。当我们关闭一个程序时,dephi会自动从内存中释放该对象所占内存空间,
不会导致该内寸会造成永久性丢失。但是如果把对象编译进dll程序中,对象就一定是动态创建的,必须在程序退出前释放该对象,否则会出现非法操作的标示。某个有名的UCD中的MP3播放函数就存在这样的问题:必须要求用户执行释放对象的函数才能正常退出,如果用户是使用windows窗口的系统菜单退出的话,则非法操作不可避免,从另一方面来说,一个好的软件是应该充分考虑到用户操作过程中可能出现的种种问题,我们只能给他们提供方便而不是给他们添加麻烦,对于一个商业化的软件这是基本原则。现在的问题是:我们如何知道用户什么时候关闭程序,也就是需要抓住释放对象的机会。
当然,制作一个系统钩子函数能够解决这个问题。然而,authorware同样给了程序员一个机会,这就是authorware中的对象消息。
要使我们的对象能够接收authorware的内部消息,我们第一步就需要把我们的对象加入到authorware的显示对象列表中去。Authorware的显示对象列表是个抽象的概念,它向每个登记到列表中的对象发布消息,我们就可以根据具体的消息来处理。
加入对象到显示列表的命令是通过windows api 函数sendmessage来实现的,函数描述如下:
id = SendMessage(pwHandle, APWC_POST, 0, lpPostPB)
参数 描述
pwHandle Authorware 窗口句柄
lpPostPB 指向一个 APWC_POSTPB 参数块的远指针
APWC_POST 这条消息就是告诉authorware我要加入一个对象。(其值为常数:$6000)
返回值
0: 返回该对象的唯一标示号.
0: 无法加载对象过程.
-1 在dll中的对象过程未找到.
-2 :非法内存.
-3 :参数错误.
lpPostPB 变量结构描述如下:
type
APWC_POSTPB = record
size: Word; //该结构的长度
dll_ptr: PChar; //加载的dll文件名称
function_ptr: PChar; //对象过程函数名称
rect: TRECT; //对象接收消息的区域
port: Integer; //接收消息方式
data_ptr: 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;//适用于更新频率较快的对象
SCREEN_PORT = 2;//适用于直接画屏的对象,如果对象是动画之类就选它
RECT 是一个在authorware的窗口内定义的区域,如果你需要接收象鼠标消息这样
的消息,则只在该区域你才能接收
二 创建对象过程函数
在登记对象之后,authorware就向我门定义的对象过程发送消息,我们根据具体的消息,就实现了控制我们对象。
对象过程函数格式:
opjiectProc(awparam: APWN_AB;msg: NOTIFICATION_MESSAGE):Boolean;
参数说明:
awparam:在我们创建对象过程中定义的指向APWN_AB结构的指针
APWN_AB结构声明如下:
type
APWN_AB = record
size: Word; //该结构的长度
id: LongInt; //分配给对象的唯一标示号
icon_id: Integer; //创建该对象所在图标,通常是使用计算图标//的地方
displ
文档评论(0)