-
Windows 的訊息傳遞系統由 3 個部分組成:
訊息佇列。 Windows 能夠維護所有應用程式的訊息佇列。 必須從訊息佇列中提取應用程式。
訊息,然後將其分配給視窗。
訊息迴圈。 通過此迴圈機制,應用程式從訊息佇列中檢索訊息,並將其分派到相應的視窗。
之後,從訊息佇列中檢索下一條訊息,然後依次分配給相應的視窗。
視窗過程。 每個視窗都有乙個視窗程序來接收傳遞到視窗的訊息,其任務是獲取訊息。
回應它。 視窗過程是乙個**函式; 處理訊息後,它通常會向 Windows 返回乙個值。
請注意,函式是由 Windows 或外部模組呼叫的程式中的函式。
訊息從生成到視窗響應訊息有 5 個步驟
1) 系統中發生了事件。
2) Windows 將事件轉換為訊息並將其放入訊息佇列中。
3) 應用程式從訊息佇列接收訊息並將其儲存在 TMSG 記錄中。
4) 應用程式通過視窗程序將訊息傳遞到適當的視窗視窗。
5) 視窗程序響應此訊息並對其進行處理。
步驟 3 和 4 構成了應用程式的訊息迴圈。 由於訊息迴圈,訊息迴圈往往是 Windows 應用程式的核心。
使應用程式能夠響應外部事件。 訊息迴圈的任務是從訊息佇列中檢索訊息並將其傳遞到相應的視窗。 如果訊息佇列中沒有訊息,則 Windows 允許其他應用程式處理其訊息。
Windows作業系統最大的特點是它的圖形化操作介面,它基於它的訊息處理機制。 如果您不了解 Windows 訊息處理,您將無法深入了解 Windows 程式設計。 不幸的是,許多程式設計師只聽說過一點 Windows 訊息,對它們的使用知之甚少,更不用說它們的內部實現了。
可以說,掌握這部分知識就是掌握了Windows程式設計中的法寶,靈活運用會大大提高我們的程式設計能力。
-
標準 Windows 訊息、控制訊息、命令訊息。
-
很容易理解,訊息傳遞和訊息處理可以理解為公司的前台及其相關工作。
Windows系統會不斷生成訊息,比如滑鼠的動作會產生滑鼠的訊息,定時器會產生定時器的訊息,網路輸入輸出會產生套接字事件訊息等,系統也會有廣播訊息,就像前台繼續接收**一樣, 不斷收到快遞,不斷有人來找一樣。如果是需要安排的事情,比如給領導幾點鐘,去哪裡吃飯,那麼就相當於帶有一些引數的訊息,那麼前台就可以把這些訊息引數轉交給領導秘書,由領導秘書來安排。 簡而言之,訊息和訊息處理類似於這樣的前端機制。
應用程式有乙個訊息佇列,它充當接收者,然後前台人員不斷將事務移交給適當的人員(訊息程序)。 訊息處理需要排隊,先處理第一條訊息,這個佇列有容量限制,如果超出了前台工作人員當天處理工作的能力,後面的訊息就會丟失。
-
hwnd
32 位視窗控制代碼。 Windows 可以是任何型別的螢幕物件,因為 Win32 能夠維護大多數可視物件(視窗、對話方塊、按鈕、框等)的控制代碼。
message
用於區分其他訊息的常量值,可以是 Windows 單位的預定義常量,也可以是自定義常量。
wparam
這通常是與訊息相關的常量值,也可以是視窗或控制項的控制代碼。
lparam
這通常是指向記憶體中資料的指標。
由於 wparam、lparam 和 pointer 都是 32 位的,因此它們等同於 dword。 因此,它們可以相互轉換。
-
訊息本身作為記錄(通常在 C++ 程式集中稱為“結構”)傳遞到應用程式,其中包含訊息型別以及有關如何分解訊息的其他資訊。 例如,對於通過單擊乙個好的導視滑鼠生成的訊息,此記錄 (struct) 包含滑鼠單擊的訊息編號 (wm lbuttondown) 以及單擊滑鼠時朋友和孫子的坐標(由 x,y 值連線的 32 位整數)。 此記錄型別稱為 TMSG。
這在 Delphi 的 Windows 單元中是這樣說的:
typetmsg = packed recordhwnd: hwnd;視窗手柄。
message: uint;訊息常量識別符號。
wparam: wparam ;有關 16 位訊息的特定附加資訊。
lparam: lparam ;32 位訊息的特定附加資訊。
time: dword;建立訊息的時間。
pt: tpoint;建立訊息時滑鼠的位置。
end ;其中 tpoint 定義為:
tpoint= record
x:integer;
y:integer;
end;C 語言中的定義是:
typedef struct msg
hwnd hwnd;視窗手柄。
uint message;訊息常量識別符號。
wparam wparam;32 位訊息的特定附加資訊。
lparam lparam;32 位訊息的特定附加資訊。
dword time;建立訊息的時間。
tpoint pt;建立訊息時滑鼠的位置。
tmsg;typedef struct tpointint x;
int y;
tpoint;
人類的心理過程包括三個過程:認知、情感和意志。 心理過程是指心理活動在一定時期內在客觀事物的影響下發生和發展的過程。 它通常包括三個方面:認知過程、情感過程和意志過程。 >>>More
為了起訴離婚,當事人首先需要做好訴前準備,然後向有管轄權的法院提起離婚訴訟。 以下是訴前準備和提起訴訟的一般流程的簡要說明: >>>More