欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于MiniGUI的窗口消息處理方法

文檔序號:8472768閱讀:395來源:國知局
一種基于MiniGUI的窗口消息處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖形界面系統(tǒng)領(lǐng)域,更具體地,涉及一種基于Mini⑶I的窗口消息處理方法。
【背景技術(shù)】
[0002]MiniGUI是一款面向嵌入式系統(tǒng)的高級窗口系統(tǒng)和圖形用戶界面支持系統(tǒng),為嵌入式Linux系統(tǒng)提供了完整的圖形系統(tǒng)支持。由于MiniGUI具有可伸縮性強、占用資源少、高性能、高可靠性、可配置性等技術(shù)優(yōu)勢,因此被廣泛應(yīng)用于通訊、醫(yī)療、工控、電力、機頂盒、多媒體終端等領(lǐng)域。
[0003]Mini⑶I的消息處理過程是與Windows風(fēng)格的消息處理機制類似,都是通過消息回調(diào)函數(shù)對系統(tǒng)產(chǎn)生的消息進(jìn)行響應(yīng)處理。如圖1所示,其處理方式都是在消息回調(diào)函數(shù)中使用大量的C語法switch…case分支來分列所支持的消息,并利用消息回調(diào)函數(shù)進(jìn)入相應(yīng)的case分支對系統(tǒng)產(chǎn)生的消息進(jìn)行處理,這種傳統(tǒng)的處理方法在處理少量系統(tǒng)消息時比較直觀且編程簡單,但是當(dāng)消息回調(diào)函數(shù)中需處理大量的系統(tǒng)消息時,由于處理代碼段過長,消息回調(diào)函數(shù)顯得累贅,條理不分明,不利于系統(tǒng)的維護工作,而且基于這種傳統(tǒng)方法開發(fā)的程序,代碼重用性與可移植性也比較差。

【發(fā)明內(nèi)容】

[0004]本發(fā)明提供了一種基于Mini⑶I的窗口消息處理方法,該方法解決了消息回調(diào)函數(shù)在處理大量函數(shù)時由于代碼過長導(dǎo)致的條理不清、效率不高的問題,同時降低了代碼之間的依賴性,增加了代碼的可移植性。
[0005]為實現(xiàn)以上發(fā)明目的,采用的技術(shù)方案是:
一種基于Mini⑶I的窗口消息處理方法,獲取系統(tǒng)窗口可能產(chǎn)生的窗口消息,通過這些窗口消息構(gòu)建消息數(shù)組,然后對消息數(shù)組中的每個窗口消息都編寫對應(yīng)的處理函數(shù);在系統(tǒng)窗口產(chǎn)生消息回調(diào)的時候,通過對消息回調(diào)函數(shù)的分拆獲取待處理的窗口消息,然后使用消息回調(diào)函數(shù)在消息數(shù)組中遍歷與待處理的窗口消息一致的關(guān)聯(lián)窗口消息,在遍歷得到關(guān)聯(lián)窗口消息之后,調(diào)用關(guān)聯(lián)窗口消息對應(yīng)的處理函數(shù),對待處理的窗口消息進(jìn)行處理。
[0006]優(yōu)選地,所述消息數(shù)組中的窗口消息通過消息結(jié)構(gòu)體與對應(yīng)的處理函數(shù)進(jìn)行關(guān)聯(lián),所述消息結(jié)構(gòu)體包括整型值和指針變量,其中整型值為窗口消息的標(biāo)識值,指針變量為指向?qū)?yīng)的處理函數(shù)入口地址的指針。
[0007]優(yōu)選地,所述消息結(jié)構(gòu)體存儲在同類型的數(shù)組或者鏈表中,供消息回調(diào)函數(shù)進(jìn)行訪問。
[0008]優(yōu)選地,所述消息回調(diào)函數(shù)通過數(shù)組結(jié)構(gòu)體實現(xiàn)對消息數(shù)組的訪問,數(shù)組結(jié)構(gòu)體包括整型值和指針變量,整型值為消息數(shù)組包含元素的數(shù)量,指針變量為指向消息數(shù)組入口地址的指針; 消息回調(diào)函數(shù)實現(xiàn)對消息數(shù)組的訪問之后,再在消息數(shù)組中遍歷與待處理的窗口消息一致的關(guān)聯(lián)窗口消息。
[0009]優(yōu)選地,所述消息回調(diào)函數(shù)的函數(shù)原型包括四個形參和一個整型的返回值,其中四個形參分別為一個窗口句柄、一個消息標(biāo)識值和兩個整型數(shù)值;處理函數(shù)的函數(shù)原型與消息回調(diào)函數(shù)的函數(shù)原型一致。
[0010]優(yōu)選地,若存在著遍歷不到關(guān)聯(lián)窗口消息的情況,則調(diào)用Mini⑶I的默認(rèn)消息處理函數(shù)對遍歷不到關(guān)聯(lián)消息的待處理窗口消息進(jìn)行處理。
[0011]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明提供的窗口消息處理方法,通過對系統(tǒng)窗口可能產(chǎn)生的窗口消息編寫對應(yīng)的處理函數(shù),因此在產(chǎn)生消息回調(diào)的時候,只需要在消息數(shù)組中尋找與待處理的窗口消息一致的關(guān)聯(lián)窗口消息,再調(diào)用關(guān)聯(lián)窗口消息對應(yīng)的處理函數(shù),即可對待處理的窗口消息進(jìn)行處理,由于上述過程中各個窗口消息對應(yīng)的處理函數(shù)都是獨立編寫的,因此代碼重用性較高,且增加了代碼的可移植性,同時解決了消息回調(diào)函數(shù)在處理大量函數(shù)時由于代碼過長導(dǎo)致的條理不清、效率不高的問題。
【附圖說明】
[0012]圖1為現(xiàn)有技術(shù)提供的Mini⑶I窗口消息處理方法的流程圖。
[0013]圖2為本發(fā)明提供的窗口消息處理方法的數(shù)據(jù)組織示意圖。
[0014]圖3為窗口消息處理方法的流程圖。
[0015]圖4為窗口程序“HelloWorld.”的窗口消息處理流程圖。
【具體實施方式】
[0016]附圖僅用于示例性說明,不能理解為對本專利的限制;
以下結(jié)合附圖和實施例對本發(fā)明做進(jìn)一步的闡述。
實施例1
本發(fā)明提供了一種基于MiniGUI的窗口消息處理方法,該方法首先獲取系統(tǒng)窗口可能產(chǎn)生的窗口消息,通過這些窗口消息構(gòu)建消息數(shù)組,然后對消息數(shù)組中的每個窗口消息都編寫對應(yīng)的處理函數(shù);
在系統(tǒng)窗口產(chǎn)生消息回調(diào)的時候,通過對消息回調(diào)函數(shù)的分拆獲取待處理的窗口消息,然后使用消息回調(diào)函數(shù)在消息數(shù)組中遍歷與待處理的窗口消息一致的關(guān)聯(lián)窗口消息,在遍歷得到關(guān)聯(lián)窗口消息之后,調(diào)用關(guān)聯(lián)消息窗口對應(yīng)的處理函數(shù),對待處理的窗口消息進(jìn)行處理。
[0017]Mini⑶I是基于事件驅(qū)動的,它的窗口每產(chǎn)生一個窗口消息,無論是內(nèi)部的還是外部的窗口消息,都必須有相應(yīng)的過程進(jìn)行處理。而這個處理過程就是由消息回調(diào)函數(shù)來完成的。
[0018]首先對Mini⑶I的消息回調(diào)函數(shù)進(jìn)行分析,可以發(fā)現(xiàn),所有的消息回調(diào)函數(shù)都有固定的函數(shù)原型,包括有四個形參和一個整型的返回值,四個形參分別為一個窗口句柄、一個消息標(biāo)識值和兩個整型數(shù)值,在傳統(tǒng)的開發(fā)模式中,所有消息的處理過程都是在消息回調(diào)函數(shù)的switch...case結(jié)構(gòu)中完成的,也就是說,窗口消息所對應(yīng)的處理過程也應(yīng)該會用到這四個形參和有相同類型的返回值,因此,在獲取系統(tǒng)窗口可能產(chǎn)生的窗口消息,通過這些窗口消息構(gòu)建消息數(shù)組之后,第一步要做的就是需要定義出處理函數(shù)的函數(shù)原型,如前面所陳述的,處理函數(shù)的原型與回調(diào)函數(shù)的原型是一致的。而為了能方便地調(diào)用處理函數(shù),還需要定義一個指向處理函數(shù)的函數(shù)指針類型,定義描述如下:typedefint(*msg_callback)(HWND, int, WPARAM, LPARAM);
上述方案中,使用typedef關(guān)鍵字根據(jù)處理函數(shù)的原型定義出一個函數(shù)指針類型并且命名為msg_callback。定義出處理函數(shù)的函數(shù)原型,接下來需要考慮的就是如何把消息與處理函數(shù)關(guān)聯(lián)起來,為了實現(xiàn)這種關(guān)聯(lián),本實施例使用struct關(guān)鍵字定義了一個消息結(jié)構(gòu)體,為了描述方便,我們把它命名為message,這個message結(jié)構(gòu)中包含有一個32位的無符號類型的整型值和一個msg_CallbaCk類型的指針變量。其中,整型值就是窗口消息的標(biāo)識值,msg_calIback類型的指針變量就是指向處理函數(shù)入口地址的指針。消息結(jié)構(gòu)體存儲在同類型的數(shù)組或者鏈表中,供消息回調(diào)函數(shù)進(jìn)行訪問。
[0019]為了能夠使回調(diào)函數(shù)可以更方便地訪問消息數(shù)組,本實施例使用struct關(guān)鍵字定義一個數(shù)組結(jié)構(gòu)體并將它命名為message_info,該數(shù)組結(jié)構(gòu)體包含有一個32位的無符號類型的整型值和一個message類型的指針變量。其中,整型值就是消息數(shù)組的元素個數(shù),message類型的指針變量就是指向message類型消息數(shù)組入口地址的指針。
[0020]完成了前面的通用結(jié)構(gòu)定義后,本實施例將針對“HelloWorld.”窗口程序進(jìn)行詳細(xì)的說明
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
潼关县| 天津市| 札达县| 贵德县| 双江| 沈丘县| 华亭县| 锦州市| 田阳县| 公安县| 浮山县| 衡东县| 潼关县| 宁晋县| 天津市| 二手房| 天气| 德安县| 泾川县| 临夏市| 腾冲县| 宜兴市| 吉安市| 石门县| 莱西市| 上思县| 远安县| 东宁县| 区。| 肃宁县| 始兴县| 二连浩特市| 中方县| 江安县| 海安县| 新余市| 桂平市| 昌平区| 达州市| 沿河| 巴东县|