Authorware UCD 开发大揭秘(九)

2008-04-09 04:21:49来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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; //创建该对象所在图标,通常是使用计算图标//的地方

display: HWND; //authorware主窗口句柄

wparam: WPARAM; //msg的第一参数

lparam: LPARAM; //msg的第二参数

rect: TRECT; //由APWC_POSTPB参数传递过来

data_ptr: longint; //由APWC_POSTPB参数传递过来

data_size: Word; //由APWC_POSTPB参数传递过来

name_ptr: PChar; //由APWC_POSTPB参数传递过来

end {APWN_AB};

FAR = APWN_AB; //声明作为远指针调用(其实在现在32位操作//系统下已无必要 ,可删去)

APWN_AB_PTR = ^APWN_AB;//定义指针


msg:NOTIFICATION_MESSAGE是authorware定义的消息类型

该变量声明如下:

type

NOTIFICATION_MESSAG=WORD;

Msg参数就是authorware传来的消息,它固定为以下几种类型:

消息名称 参数 意义 值

APWN_INIT 对象正在创建. 0

wparam 0

lparam 0

APWN_DESTROY 对象正在消灭并释放所占内存 1

wparam 0

lparam 0


APWN_PAINT 对象在设备描述表上重绘自身 2

wparam HDC (authorware主窗口设备描述表)

lparam 0


APWN_SAVE 对象保存自身的数据以便重载 3

wparam 0

lparam 0


APWN_RESTORE 对象重载保存的私有数据 4

wparam 0

lparam 0


APWN_LBDOWN 鼠标左键按下. 5

wparam 0

lparam (低位字节存放x坐标,高位字节存放y坐标)


APWN_LBDBLCK 鼠标左键双击. 6

wparam 0

lparam (低位字节存放x坐标,高位字节存放y坐标)


APWN_LBUP 鼠标左键抬起. 7

wparam 0

lparam (低位字节存放x坐标,高位字节存放y坐标)


APWN_WINDOWOPEN 8

wparam 0

lparam 0

APWN_WINDOWCLOSE authorware主窗口打开/关闭 9

wparam 0

lparam 0

APWN_SETPROPERTY 系统使用了SetProperty()函数 10.

wparam 0

lparam APWN_PROP_PTR(这是另一个authorware定义的结构参数)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Authorware UCD 开发大揭秘(四)

下一篇:DBGrid中用光标键控制Cell