MFC 消息中( WPARAM wParam,LPARAM lParam)包含信息


windows的消息具有以下兩個參數:
  (1)字參數(wParam)
  (2)長參數(lParam)
  字參數和長參數都是32位整數,用於提供消息的附帶消息,是消息傳遞過程中參數的載體。附加信息消息號取決於消息號。

一、wParam和lParam消息 :部分說明需要查看MSDN

例如:

WM_SIZE

wParam
Specifies the type of resizing requested. This parameter can be one of the following values.
SIZE_MAXHIDE
Message is sent to all pop-up windows when some other window is maximized.
SIZE_MAXIMIZED
The window has been maximized.
SIZE_MAXSHOW
Message is sent to all pop-up windows when some other window has been restored to its former size.
SIZE_MINIMIZED
The window has been minimized.
SIZE_RESTORED
The window has been resized, but neither the SIZE_MINIMIZED nor SIZE_MAXIMIZED value applies

lParamThe low-order word of lParam specifies the new width of the client area.

The high-order word of lParam specifies the new height of the client area.

 

 1 WM_PAINT消息,LOWORD(lParam)是客戶區的寬,HIWORD(lParam)是客戶區的高。

 2 滾動條WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠標對滾動條的操作。比如上、下、左、右、翻頁、移動等。

3 擊鍵消息,有WM_SYSKEYDOWN、WM_SYSKEYUP、WM_KEYUP、WM_KEYDOWN,其中wParam是虛擬鍵代碼,lParam是包含屬於擊鍵的其他信息。lParam消息參數分為6個域,有重復計數、環境代碼、鍵的先前狀態等。 

4 字符消息WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR,lParam消息參數跟擊鍵消息的lParam消息參數內容相同,wParam參數是ANSI或Unicode字符代碼

5 客戶區鼠標消息WM_LBUTTONDOWN、WM_LBUTTONUP、WM_RBUTTONDOWN、WM_RBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONUP,lParam參數的低位是鼠標的客戶區x坐標,高位是客戶區y坐標。wParam參數是指示鼠標鍵及Shift和Ctrl鍵的狀態。wParam&MK_SHIFT或MK_CTRL,如果返回TRUE就意味着有按下Shift或Ctrl鍵。

6 非客戶區消息,wParam參數指明移動或者單擊鼠標鍵的非客戶區位置,以HT開頭,lParam參數低位指出了鼠標所在屏幕坐標的x坐標,高位指出了鼠標所在屏幕坐標的y坐標。 

 7 鼠標輪滾動消息,WM_MOUSEWHEEL消息,lParam將獲得鼠標的屏幕位置(坐標),wParam參數的低位表明鼠標鍵和Shift與Ctrl鍵的狀態。wParam高位有一個“delta”值,該值可正可負,指出了滾輪導致屏幕滾動幾行,120表示向上3行。 

 8 計時器消息WM_TIMER,wParam參數等於計時器的ID值,lParam為0

 9 按鈕子窗口的WM_COMMAND消息,wParam參數的低位是子窗口ID,高位是通知碼, lParam參數是子窗口句柄。 

10 焦點消息,對於正在失去焦點的窗口,會收到WM_KILLFOCUS消息,其wParam參數是即將接收輸入焦點的窗口的句柄。對於即將獲取焦點的窗口,會收到WM_SETFOCUS消息,其wParam參數是正在失去焦點的窗口的句柄。

11 編輯控制的WM_COMMAND消息,wParam參數的低位是子窗口ID,高位是通知碼, lParam參數是子窗口句柄。

12 列表框的WM_COMMAND消息,wParam參數的低位是子窗口ID,高位是通知碼, lParam參數是子窗口句柄。 

13 菜單消息1,WM_INITMENU,wParam是主菜單句柄,lParam是0. 

14 菜單消息2,WM_MENUSELECT,菜單跟蹤消息,指針移到菜單的某一些,就會發送這個消息給窗口過程,其wParam參數的低位是選中項菜單的ID或者彈出式菜單的句柄,高位是選擇標識,lParam參數是包含選中項的菜單句柄。

15 菜單消息3,WM_INITMENUPOPUP,准備顯示一個彈出式菜單時產生的消息,wParam參數是彈出式菜單的句柄,lParam的低位是彈出式菜單的索引,如果該菜單是系統菜單,那么高位是1,否則為0。 

 16 菜單消息4,WM_COMMAND,選中菜單后產生,wParam低位是擊中菜單的ID,高位是0,lParam參數也是0。

 17 菜單消息5,WM_SYSCOMMAND,表示用戶從系統菜單中選擇一個啟用的菜單項,其wParam參數是菜單的ID, lParam為0.如果該消息是由按鼠標產生的,那么lParam參數是鼠標的屏幕坐標。

18 加速鍵消息,WM_COMMAND消息,wParam低位是加速鍵ID,高位是1, lParam是0.

 

 

消息

說明

wParam

lParam

WM_PAINT

   

低位是客戶區的寬

高位是客戶區的高

WM_VSCROLL

WM_HSCROLL

窗口滾動條消息

低位指出了鼠標對滾動條的操作

 
 

擊鍵消息

虛擬鍵代碼

分為6個域,有重復計數、環境代碼、鍵的先前狀態等

 

字符消息

ANSI或Unicode字符代碼

分為6個域,有重復計數、環境代碼、鍵的先前狀態等

 

客戶區鼠標消息

指示鼠標鍵及Shift和Ctrl鍵的狀態

鼠標的客戶區坐標

 

非客戶區鼠標消息

指明移動或者單擊鼠標鍵的非客戶區位置,以HT開頭

鼠標的屏幕坐標

WM_MOUSEWHEEL

鼠標輪滾動消息

低位表明鼠標鍵和Shift與Ctrl鍵的狀態

高位指出了滾輪導致屏幕滾動幾行

鼠標的屏幕位置

WM_TIMER

計時器消息

計時器的ID值

0

WM_COMMAND

按鈕

低位是子窗口ID,高位是通知碼

子窗口句柄

WM_SETFOCUS

焦點消息

正在失去焦點的窗口的句柄

 

WM_KILLFOCUS

焦點消息

即將接收輸入焦點的窗口的句柄

 

WM_COMMAND

編輯控制

低位是子窗口ID,高位是通知碼

子窗口句柄

WM_COMMAND

列表框

低位是子窗口ID,高位是通知碼

子窗口句柄

WM_INITMENU

 

主菜單句柄

0

WM_MENUSELECT

菜單跟蹤消息

低位是選中項菜單的ID或者彈出式菜單的句柄,高位是選擇標識

選中項的菜單句柄

WM_INITMENUPOPUP

准備顯示一個彈出式菜單時產生

彈出式菜單的句柄

低位是彈出式菜單的索引,如果該菜單是系統菜單,那么高位是1,否則為0.

 

WM_COMMAND

選中菜單后產生

低位是擊中菜單的ID

高位是0

0

WM_SYSCOMMAND

用戶從系統菜單中選擇一個啟用的菜單項

菜單的ID

0如果該消息是由按鼠標產生的,那么是鼠標的屏幕坐標。

WM_COMMAND 

加速鍵消息

低位是加速鍵ID

高位是1

0

 

 

 

在Win32中,wParam   lParam是用來傳遞消息數據的最常用的手段. 
比如,對按鍵消息來說,鼠標的X和Y的坐標被壓縮進lParam中 
對MFC來說,消息可以用多樣的類型參數來傳遞,對用戶自定義消息 
來說,只能用wParam和lParam來傳遞。

在Win32   SDK中消息本身是作為一個結構體記錄傳遞給應用程序的,這個記錄中包含消息的類型以及其他信息。這個記錄類型叫做MSG,它在window中是這樣聲明的: 
typedef   struct   tagMSG   {           //   msg     
      HWND   hwnd;       //窗口句柄 
      UINT   message;       //消息常量標識符 
      WPARAM   wParam;     //32位消息的特定附加信息,具體表示什么處決於message 
      LPARAM   lParam;     //32位消息的特定附加信息,具體表示什么處決於message 
      DWORD   time;       //消息創建時的時間 
      POINT   pt;               //消息創建時的鼠標位置 
}   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傳過來的數據


二、應用獲取控件的ID

LOWORD(GetCurrentMessage()->wParam) ===>獲得發消息的控件ID值

 

WORD HIWORD(
    DWORD dwValue
);
WORD LOWORD(
    DWORD dwValue
);

知網有篇文章也許有用:C++消息參數wParam與lParam的研究


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM