不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>windows教程>

Windows消息機(jī)制含義

時(shí)間: 志藝942 分享

  Windows系統(tǒng)是一個(gè)消息驅(qū)動(dòng)的OS,什么是消息呢?接下來(lái)是小編為大家收集的Windows消息機(jī)制含義,希望能幫到大家。

  Windows消息機(jī)制含義

  1、消息的組成:一個(gè)消息由一個(gè)消息名稱(chēng)(UINT),和兩個(gè)參數(shù)(WPARAM,LPARAM)。當(dāng)用戶(hù)進(jìn)行了輸入或是窗口的狀態(tài)發(fā)生改變時(shí)系統(tǒng)都會(huì)發(fā)送消息到某一個(gè)窗口。例如當(dāng)菜單轉(zhuǎn)中之后會(huì)有WM_COMMAND消息發(fā)送,WPARAM的高字中(HIWORD(wParam))是命令的ID號(hào),對(duì)菜單來(lái)講就是菜單ID。當(dāng)然用戶(hù)也可以定義自己的消息名稱(chēng),也可以利用自定義消息來(lái)發(fā)送通知和傳送數(shù)據(jù)。

  2、誰(shuí)將收到消息:一個(gè)消息必須由一個(gè)窗口接收。在窗口的過(guò)程(WNDPROC)中可以對(duì)消息進(jìn)行分析,對(duì)自己感興趣的消息進(jìn)行處理。例如你希望對(duì)菜單選擇進(jìn)行處理那么你可以定義對(duì)WM_COMMAND進(jìn)行處理的代碼,如果希望在窗口中進(jìn)行圖形輸出就必須對(duì)WM_PAINT進(jìn)行處理。

  3、未處理的消息到那里去了:M$為窗口編寫(xiě)了默認(rèn)的窗口過(guò)程,這個(gè)窗口過(guò)程將負(fù)責(zé)處理那些你不處理消息。正因?yàn)橛辛诉@個(gè)默認(rèn)窗口過(guò)程我們才可以利用Windows的窗口進(jìn)行開(kāi)發(fā)而不必過(guò)多關(guān)注窗口各種消息的處理。例如窗口在被拖動(dòng)時(shí)會(huì)有很多消息發(fā)送,而我們都可以不予理睬讓系統(tǒng)自己去處理。

  4、窗口句柄:說(shuō)到消息就不能不說(shuō)窗口句柄,系統(tǒng)通過(guò)窗口句柄來(lái)在整個(gè)系統(tǒng)中唯一標(biāo)識(shí)一個(gè)窗口,發(fā)送一個(gè)消息時(shí)必須指定一個(gè)窗口句柄表明該消息由那個(gè)窗口接收。而每個(gè)窗口都會(huì)有自己的窗口過(guò)程,所以用戶(hù)的輸入就會(huì)被正確的處理。例如有兩個(gè)窗口共用一個(gè)窗口過(guò)程代碼,你在窗口一上按下鼠標(biāo)時(shí)消息就會(huì)通過(guò)窗口一的句柄被發(fā)送到窗口一而不是窗口二。

  5、示例:下面有一段偽代碼演示如何在窗口過(guò)程中處理消息

  LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM){ switch(uMessageType) {//使用SWITCH語(yǔ)句將各種消息分開(kāi)

  case(WM_PAINT): doYourWindow(...);//在窗口需要重新繪制時(shí)進(jìn)行輸出

  break; case(WM_LBUTTONDOWN): doYourWork(...);//在鼠標(biāo)左鍵被按下時(shí)進(jìn)行處理

  break; default: callDefaultWndProc(...);//對(duì)于其它情況就讓系統(tǒng)自己處理 break; }}

  接下來(lái)談?wù)勈裁词窍C(jī)制:系統(tǒng)將會(huì)維護(hù)一個(gè)或多個(gè)消息隊(duì)列,所有產(chǎn)生的消息都回被放入或是插入隊(duì)列中。系統(tǒng)會(huì)在隊(duì)列中取出每一條消息,根據(jù)消息的接收句柄而將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個(gè)運(yùn)行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據(jù)接收窗口的句柄調(diào)用相應(yīng)的窗口過(guò)程。而在沒(méi)有消息時(shí)消息循環(huán)就將控制權(quán)交給系統(tǒng)所以Windows可以同時(shí)進(jìn)行多個(gè)任務(wù)。下面的偽代碼演示了消息循環(huán)的用法:

  while(1){ id=getMessage(...); if(id == quit) break; translateMessage(...);}當(dāng)該程序沒(méi)有消息通知時(shí)getMessage就不會(huì)返回,也就不會(huì)占用系統(tǒng)的CPU時(shí)間。

  下圖為消息投遞模式

  在16位的系統(tǒng)中系統(tǒng)中只有一個(gè)消息隊(duì)列,所以系統(tǒng)必須等待當(dāng)前任務(wù)處理消息后才可以發(fā)送下一消息到相應(yīng)程序,如果一個(gè)程序陷如死循環(huán)或是耗時(shí)操作時(shí)系統(tǒng)就會(huì)得不到控制權(quán)。這種多任務(wù)系統(tǒng)也就稱(chēng)為協(xié)同式的多任務(wù)系統(tǒng)。Windows3.X就是這種系統(tǒng)。

  而32位的系統(tǒng)中每一運(yùn)行的程序都會(huì)有一個(gè)消息隊(duì)列,所以系統(tǒng)可以在多個(gè)消息隊(duì)列中轉(zhuǎn)換而不必等待當(dāng)前程序完成消息處理就可以得到控制權(quán)。這種多任務(wù)系統(tǒng)就稱(chēng)為搶先式的多任務(wù)系統(tǒng)。Windows95/NT就是這種系統(tǒng)。

看了“Windows消息機(jī)制含義”還想看:

1.Windows 中斷程序設(shè)計(jì)

2.c中timer的用法

3.中間價(jià)機(jī)制微調(diào)最新消息

Windows消息機(jī)制含義

Windows系統(tǒng)是一個(gè)消息驅(qū)動(dòng)的OS,什么是消息呢?接下來(lái)是小編為大家收集的Windows消息機(jī)制含義,希望能幫到大家。 Windows消息機(jī)制含義 1、消息的組成:一個(gè)消息由一個(gè)消息名稱(chēng)(UINT),和兩個(gè)參數(shù)(WPARAM,LPARAM)。當(dāng)用戶(hù)進(jìn)行了輸入或是
推薦度:
點(diǎn)擊下載文檔文檔為doc格式

精選文章

  • windows installer是什么怎么解決
    windows installer是什么怎么解決

    windows installer是一個(gè)執(zhí)行事務(wù)型(Transactional)安裝的引擎。當(dāng)首次安裝一個(gè)產(chǎn)品時(shí),被安裝的文件中基本很少已經(jīng)存在于計(jì)算機(jī)中,甚至可能完全沒(méi)有。接下

  • 判斷windows啟動(dòng)方式是uefi還是legacy bios教程
    判斷windows啟動(dòng)方式是uefi還是legacy bios教程

    如何確定windows啟動(dòng)類(lèi)型是uefi還是legacy bios?安裝系統(tǒng)過(guò)程中,經(jīng)常需要判斷電腦上的windows啟動(dòng)方式是什么?是uefi還是legacy bios?接下來(lái)是小編為大家收集的判

  • C盤(pán)最占內(nèi)存的文件是什么文件可以刪么
    C盤(pán)最占內(nèi)存的文件是什么文件可以刪么

    接下來(lái)是小編為大家收集的C盤(pán)最占內(nèi)存的文件是什么文件,希望能幫到大家。 C盤(pán)最占內(nèi)存的文件是什么文件 問(wèn):我的電腦C盤(pán)有三個(gè)文件體積實(shí)在太大,

  • c盤(pán)有哪些文件可以刪
    c盤(pán)有哪些文件可以刪

    如果不是系統(tǒng)重要文件,無(wú)關(guān)緊要的話那么這些文件就可以清除,但計(jì)算機(jī)操作系統(tǒng)的文件是不能隨意亂刪除的,一旦亂刪除了,計(jì)算機(jī)就會(huì)罷工了,接下

2769698