c 的訊息機制(一)

2021-07-22 05:58:07 字數 1865 閱讀 1258

今天研究c++訊息機制是遇到兩個引數不是很明白 查了下資料 記錄下(以下都是我個人理解,錯誤請幫忙指正):

lresult sendmessage

(hwnd hwnd,uint msg,wparam wparam, lparam lparam);

這是乙個向指定的視窗傳送指定訊息的函式

hwnd hwnd

這個引數是視窗的控制代碼,相當於id的玩意 不難理解

uint msg

這個是要傳送的訊息

如:wm_close,wm_settext。。。。。。。好多

wparam wparam

和lparam lpara

m這兩個引數不是很陌生 下面也是我看其他的資料得到的理解

windows的訊息必須參考幫助檔案才能知道具體的含義。如果是你定義的訊息,願意怎麼使這兩個引數都行。但是習慣上,我們願意使用lparam傳 遞位址,而wparam傳遞其他引數。」

接下來談談什麼是訊息機制:系統將會維護乙個或多個訊息佇列,所有產生的訊息都回被放入或是插入佇列中。系統會在佇列中取出每一條訊息,根據訊息的接收控制代碼而將該訊息傳送給擁有該視窗的程式的訊息迴圈。每乙個執行的程式都有自己的訊息迴圈,在迴圈中得到屬於自己的訊息並根據接收視窗的控制代碼呼叫相應的視窗過程。而在沒有訊息時訊息迴圈就將控制權交給系統所以windows可以同時進行多個任務。下面的偽**演示了訊息迴圈的用法:

例如:主程式mydlg.cpp

1.自定義訊息:#define wm_tray wm_user 100

2.函式原形:afx_msg lresult ontraynotify(wparam wparam,lparam lparam);

3.訊息對映:on_message(wm_tray,ontraynotify)

4.原函式:

lresult cmydlg::ontraynotify(wparam wparam,lparam lparam)

上面程式呢

主要過程是這樣

自定義了乙個訊息

wm_tray

再建立乙個函式

ontraynotify

然後將訊息和函式繫結在一起

on_message(wm_tray,ontraynotify)

每當接受這個訊息時就執行函式

而wparam wparam,lparam lparam這兩個引數就是訊息附帶的引數跟著訊息一起傳遞過來

在win32 sdk中訊息本身是作為乙個結構體記錄傳遞給應用程式的,這個記錄中包含了訊息的型別以及其他資訊。這個記錄型別叫做msg,它在window中是這樣宣告的:

typedef struct tagmsg msg;

hwnd 接收訊息的32位視窗控制代碼。視窗可以是任何型別的螢幕物件,因為win32能夠維護大多數可視物件的控制代碼(視窗、對話方塊、按鈕、編輯框等)。

message 用於區別其他訊息的常量值,這些常量可以是windows單元中預定義的常量,也可以是自定義的常量。

wparam 通常是乙個與訊息有關的常量值,也可能是視窗或控制項的控制代碼。 lparam 通常是乙個指向記憶體中資料的指標。由於wparam,lparam和指標都是32位的,需要時可以強制型別轉換。具體表示什麼,與message相關,他們是事先定義好的。

如果自定義訊息:#define wm_mymessage wm_user+100,需確定wparam,lparam的意義 (假設wparam=0時傳送資料,wparam=1時接收資料,lparam為cmyclass* 指標,指向乙個cmyclass物件,準備要傳送的資料或接收資料 傳送wm_mymessage時 sendmessage(hwnd,wm_mymessage,0,pmyclassobject) 接收訊息的視窗,接收wm_mymessage中(cmyclass*)lparam引數即pmyclassobject傳過來的資料

C 訊息機制

一 訊息概述 windows下應用程式的執行是通過訊息驅動的。訊息是整個應用程式的工作引擎,我們需要理解掌握我們使用的程式語言是如何封裝訊息的原理。1 什麼是訊息 message 訊息就是通知和命令。在.net框架類庫中的system.windows.forms命名空間中微軟採用面對物件的方式重新定...

c 訊息機制

1.windows系統是乙個訊息驅動的系統,windows本身有自己的訊息佇列。系統傳遞訊息給應用程式。應用程式的訊息機制 應用程式的執行是通過訊息驅動的。訊息是整個應用程式的工作引擎。2.c 重新定義了message。公共屬性 hwnd 獲取或設定訊息的處理函式 msg 獲取或設定訊息的id號 l...

Android訊息機制 一

一 角色描述 1.looper 乙個執行緒可以產生乙個looper物件,由它來管理此執行緒裡的message queue 訊息佇列 2.handler 你可以構造handler物件來與looper溝通,以便push新訊息到message queue裡 或者接收looper 從message queu...