資源描述:
《Authorware的內(nèi)部消息接口》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、Authorware的內(nèi)部消息接口首先的問題是:我們作的UCD常常在運(yùn)行期需要?jiǎng)?chuàng)建對(duì)象,尤其是對(duì)于象dephi這樣的開發(fā)語言來說,它從運(yùn)行到消滅的過程中完完全全是依靠創(chuàng)建對(duì)象來實(shí)現(xiàn)的。在dephi程序中,我們無需擔(dān)心創(chuàng)建的對(duì)象會(huì)因?yàn)闊o法及時(shí)消滅而出現(xiàn)非法操作,除非是在運(yùn)行期動(dòng)態(tài)創(chuàng)建的對(duì)象。當(dāng)我們關(guān)閉一個(gè)程序時(shí),dephi會(huì)自動(dòng)從內(nèi)存中釋放該對(duì)象所占內(nèi)存空間,不會(huì)導(dǎo)致該內(nèi)寸會(huì)造成永久性丟失。但是如果把對(duì)象編譯進(jìn)dll程序中,對(duì)象就一定是動(dòng)態(tài)創(chuàng)建的,必須在程序退出前釋放該對(duì)象,否則會(huì)出現(xiàn)非法操作的標(biāo)示。某個(gè)有名的UCD中的MP3播放
2、函數(shù)就存在這樣的問題:必須要求用戶執(zhí)行釋放對(duì)象的函數(shù)才能正常退出,如果用戶是使用windows窗口的系統(tǒng)菜單退出的話,則非法操作不可避免,從另一方面來說,一個(gè)好的軟件是應(yīng)該充分考慮到用戶操作過程中可能出現(xiàn)的種種問題,我們只能給他們提供方便而不是給他們添加麻煩,對(duì)于一個(gè)商業(yè)化的軟件這是基本原則?,F(xiàn)在的問題是:我們?nèi)绾沃烙脩羰裁磿r(shí)候關(guān)閉程序,也就是需要抓住釋放對(duì)象的機(jī)會(huì)。當(dāng)然,制作一個(gè)系統(tǒng)鉤子函數(shù)能夠解決這個(gè)問題。然而,authorware同樣給了程序員一個(gè)機(jī)會(huì),這就是authorware中的對(duì)象消息。要使我們的對(duì)象能夠接收aut
3、horware的內(nèi)部消息,我們第一步就需要把我們的對(duì)象加入到authorware的顯示對(duì)象列表中去。Authorware的顯示對(duì)象列表是個(gè)抽象的概念,它向每個(gè)登記到列表中的對(duì)象發(fā)布消息,我們就可以根據(jù)具體的消息來處理。加入對(duì)象到顯示列表的命令是通過windowsapi函數(shù)sendmessage來實(shí)現(xiàn)的,函數(shù)描述如下:id=SendMessage(pwHandle,APWC_POST,0,lpPostPB)參數(shù)描述pwHandleAuthorware窗口句柄lpPostPB指向一個(gè)APWC_POSTPB參數(shù)塊的遠(yuǎn)指針APWC_PO
4、ST這條消息就是告訴authorware我要加入一個(gè)對(duì)象。(其值為常數(shù):$6000)返回值>0:返回該對(duì)象的唯一標(biāo)示號(hào).0:無法加載對(duì)象過程.-1在dll中的對(duì)象過程未找到.-2:非法內(nèi)存.-3:參數(shù)錯(cuò)誤.lpPostPB變量結(jié)構(gòu)描述如下:typeAPWC_POSTPB=recordsize:Word;//該結(jié)構(gòu)的長(zhǎng)度dll_ptr:PChar;//加載的dll文件名稱function_ptr:PChar;//對(duì)象過程函數(shù)名稱rect:TRECT;//對(duì)象接收消息的區(qū)域port:Integer;//接收消息方式data_ptr:
5、longint;//對(duì)象攜帶私有數(shù)據(jù)結(jié)構(gòu)指針data_size:Word;//對(duì)象攜帶私有數(shù)據(jù)長(zhǎng)度name_ptr:PChar;//對(duì)象變量名end{APWC_POSTPB};FAR=APWC_POSTPB;APWC_POSTPB_PTR=^APWC_POSTPB;說明:其中如果沒有私有數(shù)據(jù),data_ptr和data_size可設(shè)為零對(duì)象過程函數(shù)名必須是用exports導(dǎo)出的函數(shù)port可取以下三個(gè)常量之一:STATIC_PORT=0;//適用于基本固定的對(duì)象,大多數(shù)情況下選它MOTION_PORT=1;//適用于更新頻率較快
6、的對(duì)象SCREEN_PORT=2;//適用于直接畫屏的對(duì)象,如果對(duì)象是動(dòng)畫之類就選它RECT是一個(gè)在authorware的窗口內(nèi)定義的區(qū)域,如果你需要接收象鼠標(biāo)消息這樣的消息,則只在該區(qū)域你才能接收二創(chuàng)建對(duì)象過程函數(shù)在登記對(duì)象之后,authorware就向我門定義的對(duì)象過程發(fā)送消息,我們根據(jù)具體的消息,就實(shí)現(xiàn)了控制我們對(duì)象。對(duì)象過程函數(shù)格式:opjiectProc(awparam:APWN_AB;msg:NOTIFICATION_MESSAGE):Boolean;參數(shù)說明:awparam:在我們創(chuàng)建對(duì)象過程中定義的指向APWN_
7、AB結(jié)構(gòu)的指針APWN_AB結(jié)構(gòu)聲明如下:typeAPWN_AB=recordsize:Word;//該結(jié)構(gòu)的長(zhǎng)度id:LongInt;//分配給對(duì)象的唯一標(biāo)示號(hào)icon_id:Integer;//創(chuàng)建該對(duì)象所在圖標(biāo),通常是使用計(jì)算圖標(biāo)//的地方display:HWND;//authorware主窗口句柄wparam:WPARAM;//msg的第一參數(shù)lparam:LPARAM;//msg的第二參數(shù)rect:TRECT;//由APWC_POSTPB參數(shù)傳遞過來data_ptr:longint;//由APWC_POSTPB參數(shù)傳遞
8、過來data_size:Word;//由APWC_POSTPB參數(shù)傳遞過來name_ptr:PChar;//由APWC_POSTPB參數(shù)傳遞過來end{APWN_AB};FAR=APWN_AB;//聲明作為遠(yuǎn)指針調(diào)用(其實(shí)在現(xiàn)在32位操作//系統(tǒng)下已無必要,可刪