青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

春暖花開
雪化了,花開了,春天來了
posts - 149,comments - 125,trackbacks - 0

Windows 消息機制

編寫Windows程序有兩年了,但當別人問起Windows消息機制總覺得很難形容清楚。在這篇中,集合了很多我從網絡中搜集來的一些知識,這里只是匯總一下。

我們編寫的Windows程序是以事件為驅動,消息機制為基礎的。對于每一個正在執行的Windows應用程序,Windows為其建立一個消息隊列,即應用程序隊列,用來存放該程序可能創建的各種窗口的消息。應用程序中含有一段稱作消息循環的代碼,用來從消息隊列中檢索這些消息并把它們分發到相應的窗口函數中。

一、消息循環

首先我們來看一下Windows消息循環。

while(GetMessage (&msg, NULL, 0, 0))       
{        
    TranslateMessage (&msg) ;        
    DispatchMessage (&msg) ;       
}

MSG結構在頭文件中定義如下:

  typedef struct tagMSG

  {

  HWND hwnd;

  UINT message;

  WPARAM wParam;

  LPARAM lParam;

  DWORD time;

  POINT pt;

  } MSG, *PMSG;

  

其數據成員的具體意義如下:

hwnd:消息將要發送到的那個窗口的句柄,用這個參數可以決定讓哪個窗口接收消息。

message:消息號,它唯一標識了一種消息類型。每種消息類型都在Windows文件進行了預定義。

wParam:一個32位的消息參數,這個值的確切意義取決于消息本身。

lParam:同上。

time:消息放入消息隊列中的時間,在這個域中寫入的并非當時日期,而是從Windows啟動后所測量的時間值。Windows用這個域來使用消息保持正確的順序。

pt:消息放入消息隊列時的鼠標坐標。

消息循環以GetMessage調用開始,它從消息隊列中取出一個消息。然后解釋和分發消息。

二、消息類型

消息主要分為兩種:一是系統定義消息;二是自定義消息。

1、系統定義消息(System-Defined Messages)

SDK中事先定義好的消息,非用戶定義的,其范圍在[0x0000, 0x03ff]之間, 可以分為以下三類:
1>
窗口消息(Windows Message)
與窗口的內部運作有關,如創建窗口,繪制窗口,銷毀窗口等。可以是一般的窗口,也可以是Dialog,控件等。
如:WM_CREATE, WM_PAINT, WM_MOUSEMOVE, WM_CTLCOLOR, WM_HSCROLL...
2>
命令消息(Command Message)
與處理用戶請求有關, 如單擊菜單項或工具欄或控件時, 就會產生命令消息。
WM_COMMAND, LOWORD(wParam)
表示菜單項,工具欄按鈕或控件的ID。如果是控件, HIWORD(wParam)表示控件消息類型
3>
控件通知(Notify Message)
控件通知消息, 這是最靈活的消息格式, Message, wParam, lParam分別為:WM_NOTIFY, 控件ID,指向NMHDR的指針。NMHDR包含控件通知的內容, 可以任意擴展。

2 程序定義消息(Application-Defined Messages)
用戶自定義的消息, 對于其范圍有如下規定:
WM_USER: 0x0400-0x7FFF    (ex. WM_USER+10)
WM_APP(winver>4.0): 0x8000-0xBFFF (ex.WM_APP+4)
RegisterWindowMessage: 0xC000-0xFFFF

 

三、隊列化消息和非隊列化消息

消息被分成隊列化消息和非隊列化消息。

隊列化消息是由Windows放入程序消息隊列中的。在程序的消息循環中,重新傳回并分配給窗口消息處理程序。非隊列化消息是在Windows的窗口過程中直接發送給窗口的消息處理程序。簡單的說,隊列化的消息被發送給消息隊列,而非隊列化的消息則發送給窗口消息處理程序。在任何情況下,窗口消息處理程序都將獲得窗口的所有消息——包括隊列化的和非隊列化的。窗口消息處理程序是窗口的消息中心。隊列化消息基本上是使用者輸入的結果,如WM_KEYDOWNWM_KEYUPWM_CHARWM_MOUSEMOVEWM_LBUTTONDOWN WM_TIMERWM_PAINTWM_QUIT。非隊列化消息則是其他消息。在許多情況下,非隊列化的消息來自呼叫特定的windows函數。

四、SendMessagePostMessage的區別

SendMessagePostMessage是在編程過程中使用頻率較高的兩個函數。

SendMessage是同步的操作,它將消息發送給窗口,除非消息處理完畢,否則該函數不會返回。其返回值表示其他程序處理消息后的返回值。

PostMessage是異步的操作,將一個消息放到與指定窗口創建的線程相關的消息隊列中,不等線程處理消息就返回。其返回值表示PostMessage是否執行成功。

五、GetMessagePeekMessage的區別

區別一:

peekmessage不管消息隊列里有沒有消息都會馬上返回,有消息返回消息,沒消息返回空值,

getmessage等待到有消息的時候才返回,

區別二:

peekmessage可以根據參數決定是否將消息保留在隊列中,

PM_NOREMOVE:該參數指示保留消息

PM_REMOVE:該參數指示移去消息

getmessage獲得消息后回把消息從消息隊列中刪去。

PeekMessage是一個異步的操作,而GetMessage則是一個同步的操作。

六、TranslateMessage

功能描述:將虛擬鍵消息轉換為字符消息。字符消息被送到調用線程的消息隊列中,在下一次線程調用函數GetMessagePeekMessage時被讀出。

返回值:

 如果消息被轉換(即,字符消息被送到線程的消息隊列中),返回非零值。

如果消息是 WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP,返回非零值,不考慮轉換。

如果消息沒有轉換(即,字符消息沒被送到線程的消息隊列中),返回值是零。

備注:

TranslateMessage函數不修改由參數lpMsg指向的消息。

TtanslateMessage僅為那些由鍵盤驅動器映射為ASCII字符的鍵產生WM_CHAR消息。

如果應用程序為其它用途而處理虛擬鍵消息,不應調用TranslateMessage函數。例如,如果TranslateAccelerator函數返回一個非零值,則應用程序將不調用TranslateMessage函數。

Windows CEWindows CE不支持掃描碼或擴展鍵標志,因此,它不支持由TranslateMessage函數產生的WM_CHAR消息中的lKeyData參數(lParam16-24的取值。

TranslateMessage函數只能用于轉換由GetMessagePeekMessage函數接收到的消息。


出處沒有記載,簡單匯總 

posted on 2009-04-29 08:02 Sandy 閱讀(898) 評論(0)  編輯 收藏 引用 所屬分類: Windows Mobile
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲电影免费观看高清完整版| 欧美高清在线一区| 国产日韩亚洲欧美综合| 在线电影一区| 中文国产成人精品| 亚洲视频久久| 欧美亚洲日本一区| 久久婷婷丁香| 欧美日韩国产123区| 国产精品黄色在线观看| 国产精品一区2区| 在线观看一区视频| 中国女人久久久| 欧美一级二区| 免费亚洲视频| 国产亚洲成av人在线观看导航| 国产精品美女主播| 欧美69wwwcom| 欧美日韩精品二区| 欧美精品免费视频| 欧美日韩亚洲激情| 欧美日韩国产亚洲一区| 久久久人成影片一区二区三区| 亚洲国产电影| 欧美视频一区| 欧美高清视频在线 | 欧美va亚洲va日韩∨a综合色| 久久亚洲风情| 99精品久久久| 久久婷婷激情| 国产精品毛片大码女人| 亚洲国产免费| 久久激情五月激情| 亚洲午夜在线| 依依成人综合视频| 亚洲欧美国产三级| 欧美成人亚洲成人| 欧美专区日韩专区| 欧美视频在线免费| 亚洲精选一区二区| 免费成人性网站| 校园春色国产精品| 国产精品va在线播放我和闺蜜| 国产日韩精品在线观看| 亚洲最新在线| 亚洲国产欧美一区二区三区久久| 亚洲欧美日韩在线观看a三区| 欧美日韩八区| 亚洲欧洲一区二区三区| 猫咪成人在线观看| 久久大逼视频| 国产视频久久久久久久| 欧美亚洲一级| 亚洲女优在线| 国产麻豆视频精品| 久久成人免费电影| 亚洲一区制服诱惑| 国产精品区二区三区日本 | 亚洲国产经典视频| 久久亚洲精选| 久久久另类综合| 激情欧美一区二区三区在线观看| 欧美亚洲专区| 亚洲一区二区久久| 欧美激情一区二区三区四区| 欧美人与性动交α欧美精品济南到| 国内成+人亚洲+欧美+综合在线| 中文精品视频| 亚洲香蕉成视频在线观看| 国产欧美亚洲视频| av成人黄色| 国产精品视频第一区| 中文精品99久久国产香蕉| 国产精品拍天天在线| 亚洲一区精彩视频| 亚洲乱码国产乱码精品精可以看| 噜噜噜91成人网| 亚洲激情综合| 亚洲国产91| 欧美伦理91| 99视频精品在线| 亚洲精品色婷婷福利天堂| 美女视频黄 久久| 日韩午夜中文字幕| 亚洲午夜未删减在线观看| 国产欧美一区二区三区在线看蜜臀| 久久精品夜色噜噜亚洲aⅴ| 欧美主播一区二区三区美女 久久精品人 | 欧美在线一二三四区| 亚洲国产精品国自产拍av秋霞| 欧美激情四色| 国产精品劲爆视频| 另类图片国产| 亚洲国产合集| 国产精品日韩欧美一区二区| 欧美一区二区三区精品电影| 欧美在线观看天堂一区二区三区| 亚洲国产成人tv| 亚洲精品视频在线观看免费| 国产精品久久久一区麻豆最新章节 | 欧美高清视频一区二区| 欧美日韩精品在线播放| 午夜视频在线观看一区二区| 久久精品成人| 亚洲精品一区二区三区樱花| 亚洲摸下面视频| 亚洲黄色免费电影| 夜夜嗨网站十八久久| 欧美永久精品| 欧美成人一区在线| 欧美成人xxx| 激情久久久久久久久久久久久久久久 | 美女视频黄a大片欧美| 亚洲一区二区动漫| 国产日韩欧美亚洲一区| 欧美亚洲免费高清在线观看| 亚洲国产高清高潮精品美女| 久久欧美肥婆一二区| 亚洲激情视频在线播放| 午夜久久资源| 亚洲午夜精品一区二区三区他趣| 午夜在线一区| 亚洲免费视频观看| 欧美日韩国产限制| 亚洲福利视频一区二区| 国产麻豆午夜三级精品| 99精品福利视频| 亚洲精品美女在线| 麻豆精品一区二区av白丝在线| 欧美专区第一页| 国产精品毛片高清在线完整版| 亚洲精品免费一二三区| 激情久久久久久| 欧美一区二区三区四区在线观看地址| 这里只有精品视频在线| 欧美激情1区2区3区| 亚洲第一在线视频| 91久久久在线| 欧美国产日本韩| 91久久久久久久久| 亚洲国产精品福利| 猛男gaygay欧美视频| 欧美不卡高清| 亚洲精品久久久久| 欧美日韩国产天堂| 亚洲一区二区免费看| 欧美中文在线免费| 激情久久久久久久| 欧美成人精品在线视频| 亚洲毛片在线免费观看| 一区二区三区日韩精品视频| 欧美日韩一卡二卡| 亚洲欧美中文另类| 久久这里只有| 亚洲精品国产精品久久清纯直播 | 久久午夜精品一区二区| 欧美激情在线播放| 欧美freesex8一10精品| 亚洲综合视频1区| 国产精品欧美日韩一区| 欧美午夜不卡视频| 国产揄拍国内精品对白 | 亚洲欧洲三级电影| 国内一区二区三区| 亚洲精品1区2区| 亚洲婷婷在线| 亚洲午夜久久久久久尤物| 国产美女扒开尿口久久久| 国产精品99久久不卡二区| 欧美一级专区免费大片| 永久555www成人免费| 欧美成人一品| 亚洲欧美日韩国产| 欧美大色视频| 亚洲男人av电影| 狠狠综合久久av一区二区老牛| 欧美成人在线免费视频| 亚洲一区在线观看免费观看电影高清| 噜噜噜91成人网| 亚洲主播在线| 亚洲国产精品一区二区久| 国产精品久久久久三级| 老鸭窝亚洲一区二区三区| 99精品99久久久久久宅男| 免费人成精品欧美精品| 欧美一级理论性理论a| 亚洲精品视频二区| 国产乱码精品1区2区3区| 欧美日本二区| 欧美**人妖| 久久久久久高潮国产精品视| 亚洲精品欧洲精品| 欧美成年人网站| 午夜精品久久久久久久久| 亚洲欧洲在线播放| 精品成人一区二区三区| 国产精品视频九色porn| 欧美噜噜久久久xxx| 麻豆免费精品视频| 欧美一区二区在线免费观看|