Authorware UCD 开发大揭秘(九)(2)
2008-04-09 04:21:49来源:互联网 阅读 ()
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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
