999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

深入分析Windows消息機制

2011-04-16 09:15:46王光輝
電腦與電信 2011年2期
關鍵詞:機制系統

王光輝

(成都理工大學信息科學與技術學院,四川成都610059)

1.引言

Windows操作系統是基于消息響應機制的被動式系統。Windows應用程序是消息驅動[1]程序,又稱事件驅動程序。事件驅動意味著操作系統的每一部分之間以及操作系統與應用程序之間是通過“消息”進行通信聯系的。由此可見,消息機制在Windows應用編程[2]的重要性。

2.消息

2.1 消息定義

消息是指Windows發出的一個通知[3],告訴應用程序某個事情發生了。例如,單擊鼠標、改變窗口大小、按下鍵盤上的一個鍵都會使Windows發送一個消息給應用程序。它可以由硬件、Windows、應用程序共同產生。消息通常分為以下四種:

(1)標準消息:除了WM_COMMAND,所有的以WM開頭的消息都是標準消息。如窗口、鼠標移動、窗口大小改變等。程序啟動或退出甚至每一段固定的時間都會產生標準Windows消息。

(2)命令消息:來自于菜單、加速鍵、工具欄按鈕的消息,這類消息都以WM_COMMAND形式呈現。

(3)通知消息:由控件產生的消息。按鍵和鼠標的單擊列表框都會產生這類消息[4],這類消息的目的是為了向父窗口(通常是對話框)通知事件的發生,它也是以WM_COMMAND形式呈現的。

(4)用戶自定義的消息。

2.2 消息結構

在Windows程序中,消息本身是作為一個記錄傳遞給應用程序的,這個記錄中包含了消息的類型以及其它信息,由MSG結構體表示。MSG結構體的定義如下:

在MSG結構中,消息是由一個消息名稱(UINT)和兩個參數(WPARAM,LPARAM)組成。當用戶進行了輸入或者窗口的狀態發生改變時,系統都會發送消息到某一個窗口。例如,當菜單點中之后會有WM_COMMAND消息發送。其中,WPARAM的高字節(HIWORD(wParam))是命令的ID號,是菜單ID。同時,用戶能定義自己的消息名稱,也能利用自定義消息來發送通知和傳送數據。

系統通過窗口句柄在整個系統中唯一標識一個窗口,發送一個消息時必須指定一個窗口句柄表明該消息由指定窗口接收。窗口可以是任何類型的屏幕對象,因為Win32能夠維護大多數可視對象的句柄(窗口、對話框、按鈕、編輯框等)。句柄決定消息被發送到哪個窗口。

2.3 消息發送

在Windows中發送消息時,一般使用PostMessage()和SendMessage()函數[5],但是它們在發送方式上有些差別。二者最基本的區別在于SendMessage()通過調用窗口過程,把消息立即發往另一個窗口并且等到該消息被處理完后才返回。PostMessage()是把消息封裝成一個MSG結構,投遞到消息隊列中,然后立即返回,無需等待。因此,PostMessage()是異步的,SendMessage()是同步的;PostMessage()只負責將消息放到消息隊列中,不確定何時處理。SendMessage()要等到收到消息處理的返回碼(DWord類型)后才繼續;PostMessage()執行后馬上返回,SendMessage()必須等到消息被處理后才會返回。

3.Windows消息機制

Windows消息機制是由消息隊列、消息循環和窗口過程三個部分組成。

3.1 消息隊列

Windows為所有消息維護著一個系統消息隊列,而對于每一個應用程序,系統又將會創建一個對應的消息隊列。Windows根據消息結構的內容將不同的消息發送給相應應用程序的消息隊列。應用程序通過PeekMessage()或GetMessage()函數從Windows消息隊列中獲取消息,然后分派給某個窗口。Windows保存的消息隊列是以線程(Thread)來分組的,即每個線程都有自己的消息隊列。

3.2 消息循環

通過Windows消息循環機制[6],應用程序能從消息隊列中檢索消息,再把它分派給適當的窗口。然后繼續從消息隊列中檢索下一條消息,再分派給適當的窗口,依次進行。函數的原型為:

消息循環以GetMessage()調用開始,它從消息隊列中取出一個消息。當取出的消息為WM_QUIT(退出消息),消息循環和應用程序退出。TranslateMessage()函數將鍵盤按鍵的虛擬碼轉換為ASCII碼,同時將WM_CHAR消息發送到消息隊列中。DispatchMessage()函數將消息轉發給Windows操作系統來調用相應的窗口過程函數處理。如果消息隊列為空,應用程序就將控制權交還給Windows。如果有需要控制權的應用程序,Windows就將控制權轉交給應用程序。這種控制權的交換使得Windows成為多任務的操作系統。

3.3 窗口過程

窗口過程是用來接收傳遞給窗口的消息,它的任務就是獲取消息然后響應它。任何一個窗口類都有一個窗口過程。同一個類的窗口使用同樣的窗口過程來響應消息。窗口過程是一個回調函數(Callback Function),它是由Windows操作系統負責調用的,而應用程序本身不能調用它。消息的處理是由窗口過程完成的,窗口過程處理了一個消息后,通常要返回一個值給Windows。系統發送消息給窗口過程,通常將消息數據作為參數傳遞給它。消息到來之后,窗口過程按照消息類型的排序進行處理,其中的參數則用來區分不同的消息。同時,窗口過程使用參數產生合適行為。下面是一個典型窗口過程的偽代碼:

Windows的操作會產生大量的不同種類的消息,窗口過程函數不可能處理所有的消息,只處理需要的消息,其它的消息就交給系統處理。DefaultWndProc()就是系統提供的處理其它程序里沒有捕獲的消息。

3.4 Windows消息機制實現過程

Windows消息機制的具體實現過程,如圖1所示:

圖1 Windows消息機制

一個消息從產生到被一個窗口響應,主要有5個步驟:

(1)系統中發生了某個事件;

(2)Windows把這個事件翻譯為消息,把它放到系統消息隊列中,然后轉發到相應線程消息隊列里;

(3)應用程序從消息隊列中接收到這個消息,把它存放在TMsg記錄中;

(4)應用程序把消息傳遞給系統,系統調用適當的窗口過程;

(5)窗口過程響應這個消息并進行處理。

在Windows消息機制中,步驟3和4構成了應用程序的消息循環。消息循環使應用程序能夠響應外部的事件,所以,它是Windows應用程序的核心。消息循環的任務就是從消息隊列中檢索消息,然后把消息傳遞給適當的窗口。如果消息隊列中沒有消息,Windows就允許其它應用程序處理它們的消息。

4.結束語

消息機制是Windows應用程序工作的核心,利用各種開發工具在此平臺上進行開發,不可避免地要與消息處理打交道。本文從消息的結構、發送、處理介紹了Windows消息機制。對于一個編寫Windows程序的程序員來說,理解Windows消息機制的運行原理對于編寫Windows應用程序是十分有益的。

[1]陳希勝.基于WINDOWS下的DMA編程[J].科技廣場,2008,12:121.

[2]周金萍,徐丙立等.Windows系統編程[M].北京:人民郵電出版社,2002.7.

[3]王芳.Windows消息機制在VB編程中的應用[J].信息技術,2005(7):146.

[4]徐靜蓉,趙雷,楊季文.消息分層處理機制在Windows應用程序開發中的應用[J].蘇州大學學報(自然科學版),2006,22(1):61.

[5]張朝霞.MFC對消息的管理初探[J].內蒙古科技與經濟,2004(23):55.

[6]李元臣.Windows的消息循環與Delphi中的消息機制[J].洛陽師范學院學報,2001(2):74.

猜你喜歡
機制系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
構建“不敢腐、不能腐、不想腐”機制的思考
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
自制力是一種很好的篩選機制
文苑(2018年21期)2018-11-09 01:23:06
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
定向培養 還需完善安置機制
中國衛生(2016年9期)2016-11-12 13:28:08
破除舊機制要分步推進
中國衛生(2015年9期)2015-11-10 03:11:12
主站蜘蛛池模板: 亚洲精品无码日韩国产不卡| 亚洲一级无毛片无码在线免费视频| 亚洲日本在线免费观看| 在线不卡免费视频| 毛片在线播放网址| 第一页亚洲| 综合色88| 99视频在线精品免费观看6| 巨熟乳波霸若妻中文观看免费| 91美女视频在线| 不卡国产视频第一页| 日韩欧美国产中文| 欧美亚洲国产精品久久蜜芽| 专干老肥熟女视频网站| 久久国产精品麻豆系列| 伊人AV天堂| 亚洲 欧美 中文 AⅤ在线视频| 国产剧情国内精品原创| 成人午夜网址| 亚洲中文字幕在线观看| 伊大人香蕉久久网欧美| 伊人久久婷婷| 国内毛片视频| 久久精品亚洲热综合一区二区| 呦女精品网站| 日韩精品亚洲一区中文字幕| 国产午夜福利片在线观看| 国产白丝av| 少妇精品网站| 网久久综合| 91在线国内在线播放老师| 99在线视频精品| 国产乱码精品一区二区三区中文 | 伊人久久福利中文字幕| 欧美日韩国产综合视频在线观看| 国产精品55夜色66夜色| 日韩国产黄色网站| 国产一区二区三区夜色| 国产成人禁片在线观看| 五月激情婷婷综合| 精品视频91| 国产亚洲高清视频| 亚洲日韩久久综合中文字幕| AV熟女乱| 97视频在线精品国自产拍| 亚洲综合中文字幕国产精品欧美 | 国产最爽的乱婬视频国语对白| 欧美日韩国产在线人成app| 激情综合婷婷丁香五月尤物| 五月天久久婷婷| 久久成人国产精品免费软件| 久久伊人操| 亚洲男人天堂网址| 国产成熟女人性满足视频| 亚洲成人动漫在线| 中文字幕日韩丝袜一区| 亚洲男人的天堂网| 免费女人18毛片a级毛片视频| 夜精品a一区二区三区| 国产97色在线| 性激烈欧美三级在线播放| 亚洲精品国产精品乱码不卞| 精品国产成人国产在线| 成人精品视频一区二区在线| 福利视频99| 久久美女精品| 女人18毛片水真多国产| 99热这里只有成人精品国产| 国产精品久久精品| 欧美综合中文字幕久久| 国产青榴视频| 中文字幕伦视频| 丁香婷婷久久| www.av男人.com| 欧美天堂久久| 欧美亚洲日韩中文| 人妻精品全国免费视频| 亚洲无码视频图片| 色噜噜久久| 青青草a国产免费观看| 香蕉eeww99国产在线观看| 亚洲欧美成人网|