Authorware UCD 开发大揭秘(九)(2)

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

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



APWN_GETPROPERTY 获取对象值. 11

wparam 0 (not used)

lparam APWN_PROP_PTR


APWN_CLOSEWINDOW 当系统函数CloseWindow()被调用时就会传递该消息 12

wparam 0

lparam 0

APWN_MOUSEMOVE 鼠标在对象上移动. 13

wparam 0

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

APWN_HITTEST 鼠标停留在对象边界. 14

wparam 0

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

APWN_USER 自定义消息 10000


这里关键的消息就是 APWN_WINDOWCLOSE,这个消息告诉我们authorware程序即将关闭,我们可相应这条消息来释放我们的对象。现在我们就用一个实例来阐述如何捉住这条消息。

打开我们前面做的函数X_createmediacontrol源代码档,在uses 语句后添加如下声明:

……

/////////////////

type

APWC_POSTPB = record

size: Word;

dll_ptr: PChar;

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;

///////////////////////

type

APWN_AB = record

size: Word;

id: LongInt;

icon_id: Integer;

display: HWND;

wparam: WPARAM;

lparam: LPARAM;

rect: TRECT;

data_ptr: longint;

data_size: Word;

name_ptr: PChar;

end {APWN_AB};

APWN_AB_PTR = ^APWN_AB;

/////////////////////////////

type

APW_NOTIFICATION_MESSAGE = Word;

const APWN_INIT = 0;

const APWN_DESTROY = 1;

const APWN_PAINT = 2;

const APWN_SAVE = 3;

const APWN_RESTORE = 4;

const APWN_LBDOWN = 5;

const APWN_LBDBLCK = 6

const APWN_LBUP= 7

const APWN_WINDOWOPEN=8

const APWN_WINDOWCLOSE = 9

const APWN_SETPROPERTY =10

const APWN_GETPROPERTY =11

const APWN_HITTEST 11

const APWN_CLOSEWINDOW= 12.

const APWN_MOUSEMOVE = 13;

const APWN_HITTEST = 14;


const STATIC_PORT = 0;

const MOTION_PORT = 1;

const SCREEN_PORT = 2;


const APWC_POST = $6000;

……

找到 function createmediacontrol(awparam:AWPARAM_PTR;visible,x,y:integer;filename:Pchar):longint;stdcall;//注 //意此处返回值类型改为longint,同时声明部分也要相应修改

//添加

var

postpb:APWC_POSTPB_PTR;

wpostpb:longint;

szfilename:Pchar;

begin

…… //创建过程不变

//在result=。。。之前添加如下代码:

getmem(szfilename,255);//给dll文件名分配内存

GetModuleFileName(hinstance,szfilename,255);//取得文件名

postpb.size:=sizeof(postpb);//设置APWC_POSTPB_PTR参数长度

postpb.dll_ptr:=szfilename;//设置APWC_POSTPB_PTR 文件名

postpb.function_ptr:=''''newproc'''';//定义对象过程函数

setrect(postpb.rect,0,0,200,200);//定义区域,无所谓,可大可小

postpb.port:= STATIC_PORT; //定义消息接收模式

postpb.name_ptr:=''''myproc'''';//定义APWC_POSTPB_PTR变量名,随便给一个好了

postpb.data_ptr:=0; //定义APWC_POSTPB_PTR 携带私有数据

postpb.data_size:=0;// 定义APWC_POSTPB_PTR 携带私有数据长度

wpostpb:=longint(postpb); //定义APWC_POSTPB_PTR的指针

sendmessage(awparam.hwnd, APWC_POST,0,wpostpb);//向authorware发送消息

……

接下来,就该写对象函数过程了,前面定义的函数名为newproc

则函数名需要保持一致

function newproc(APWNPTR:APWN_AB_PTR ;msg:word):longint;stdcall;

begin

if msg=APWN_WINDOWCLOSE then //假如消息为窗口即将关闭,即用户按下了关闭按钮或使用了退出//函数

mediaplayer.free;

result:=1;

end;

……

最后在exports中导出newproc函数

……

exports

……

newproc,

……

这样当开发者使用创建函数创建了媒体播放器后,无需关心用户何时候退出,因为系统在接收到程序关闭消息会将该消息传递给newproc函数过程,从而就可以及时释放该媒体播放器这个对象了。

标签:

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

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

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