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