Windows訊息流程

2022-07-15 15:33:11 字數 1629 閱讀 1205

很多人還是不很清楚windows的訊息機制,不明白什麼時候發生什麼事,怎麼發生的,下面的訊息,都是在createwindow函式裡執行的,有人說不是getmessage還沒執行麼怎麼取得的訊息,其實這裡是createwindow直接呼叫視窗過程函式的,createwindow引數裡不是有個class麼,註冊的類,裡面有個訊息處理過程變數還記得麼,就是wndproc,createwindow就是取這個函式位址來呼叫的,按下面訊息順序執行。

#define wm_getminmaxinfo 0x0024 hwnd(class=xx)

#define wm_nccreate 0x0081 hwnd(class=xx) 完畢後spy++有視窗顯示

#define wm_nccalcsize 0x0083 hwnd(title) //當客戶區視窗位置大小需要計算時傳送

#define wm_create 0x0001 hwnd(title) //僅僅視窗建立完畢了 又有人說這個視窗過程函式第乙個引數不是hwnd麼,這時候createwindow函式還沒返回怎麼會有hwnd呢,其實在呼叫這些訊息前,createwindow內部已經取得了hwnd,然後供這些訊息呼叫,在最後乙個wm_create返回後,把內部取得的hwnd返回**用程式呼叫! 接著呼叫 showwindow(hwnd, ncmdshow); 這個函式用來顯示視窗用,讓我們能在桌面上看到視窗,這個函式也是直接呼叫視窗過程函式,並沒有實際傳送訊息,具體訊息流程如下:

#define wm_showwindow 0x0018 //執行後視窗顯示,但看不見位置不對

#define wm_windowposchanging 0x0046 //當視窗大小,位置,z序需要改變時傳送

#define wm_ncactivate 0x0086 //將非客戶區啟用/非啟用 (是否啟用和wparam有關,如果啟用則系統用預設啟用背景畫非客戶區,否則非啟用背景畫,預設的windows的非啟用是淡藍色,啟用是藍色的)

#define wm_geticon 0x007f //執行3次在非客戶區顯示圖示標題和淡藍色背景

#define wm_activate 0x0006 //視窗準備啟用/非啟用

#define wm_setfocus 0x0007 //視窗取得鍵盤焦點時傳送

#define wm_ncpaint 0x0085 //這時繪畫視窗邊框(非客戶區)

#define wm_erasebkgnd 0x0014 //用類中定義畫刷刷客戶區背景

#define wm_windowposchanged 0x0047 //視窗位置已經改變

#define wm_size 0x0005 //當視窗大小改變時傳送

#define wm_move 0x0003 //移動視窗時傳送 最後乙個updatewindow是呼叫視窗過程函式,乙個wm_paint訊息,也是直接呼叫,用來畫視窗的客戶區,因為此時客戶區是無效的! wm_paint訊息中預設是用beginpaint(hwnd,&ps)第二個引數是paintstruct結構: t ypedef struct tagpaintstruct paintstruct 呼叫beginpaint後返回無效區域的資訊到ps中,同時把無效區域變成有效區域!這樣系統就不會重**送wm_paint訊息了。該函式返回乙個dc,這個dc是無效區域的,所以要是用這個dc畫只能畫在無效區域,其他地方畫不了!

Windows控制代碼,訊息

常用控制代碼型別及說明 控制代碼型別 說明 hwnd 標識視窗控制代碼 hinstance 標識當前例項控制代碼 hcursor 標識游標控制代碼 hfont 標識字型控制代碼 hpen 標識畫筆控制代碼 hbrush 畫刷 hdc 裝置環境 hbitmap 位圖 hicon 圖示 hmenu 選單...

Windows訊息大全

windows是一訊息 message 驅動式系統,windows訊息提供了應用程式與應用程式之間 應用程式與windows系統之間進行通訊的手段。應用程式要實現的功能由訊息來觸發,並 對訊息的響應和處理來完成。windows系統中有兩種訊息佇列,一種是系統訊息佇列,另一種是應用程式訊息佇列。計算機...

windows訊息機制

一 windows中有乙個系統訊息佇列,對於每乙個正在執行的windows應用程式,系統為其建立乙個 訊息佇列 即應用程式佇列,用來存放該程式可能 建立的各種視窗的訊息。應用程式中含有一段稱作 訊息迴圈 的 用來從訊息佇列中檢索這些訊息並把它們分發到相應的視窗函式中。二 windows為當前執行的每...