明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

區(qū)分與理解通知消息-WM_NOTIFY

[摘要]鄭力群  前言  近來,有幾個(gè)網(wǎng)友發(fā)妹兒問了我一些關(guān)于WM_NOTIFY通知消息的使用問題,為此,我寫了這篇文章,將我對WM_NOTIFY消息的理解闡述如下,希望能對各位有所幫助! ∫隬M_NO...
鄭力群

  前言

  近來,有幾個(gè)網(wǎng)友發(fā)妹兒問了我一些關(guān)于WM_NOTIFY通知消息的使用問題,為此,我寫了這篇文章,將我對WM_NOTIFY消息的理解闡述如下,希望能對各位有所幫助。

  引入WM_NOTIFY消息的原因

  1、問題的提出:

  在Windows3.x中,不存在WM_NOTIFY消息,控制子窗口的通知消息同菜單的命令消息及加速鍵消息一樣,均使用WM_COMMAND來發(fā)送,此時(shí),根據(jù)WM_COMMAND消息傳遞的做法,可知道含有如下的傳遞結(jié)構(gòu):

wParam high-order : Notify Code :(如TTN_NEEDTEXT)
wParam low-order : ControlID
lParam : ControlHandle

  使用上述結(jié)構(gòu)進(jìn)行消息的傳遞時(shí),如果一個(gè)通知消息有一些附加的消息需要發(fā)送時(shí)(如傳遞LVN_COLUMNCLICK時(shí)可能需要附加傳送如點(diǎn)擊的是那一列等信息),因?yàn)閃M_COMMAND僅能傳遞如上的參數(shù),故無法做到。

  2、解決的方案

  --Windows 3.x中的解決方案,為這些有附加消息傳送要求的通知消息,為它們各自定義了許多特殊的消息。

  以WM_DRAWITEM為例:

  lParam參數(shù)成為指向DRAWITEMSTRUCT結(jié)構(gòu)的指針,DRAWITEMSTRUCT結(jié)構(gòu)如下:

typedef struct tagDRAWITEMSTRUCT {
UINT CtlType;
UINT CtlID;
UINT itemID;
UINT itemAction;
UINT itemState;
HWND hwndItem;
HDC hDC;
RECT rcItem;
ULONG_PTR itemData;
} DRAWITEMSTRUCT;

  這樣,就實(shí)現(xiàn)了附加參數(shù)的傳遞,類似的做法在Windows3.x中隨處可見。