分析與理解通知訊息-WM_NOTIFY (轉)

worldblog發表於2007-12-15
分析與理解通知訊息-WM_NOTIFY (轉)[@more@]

鄭力群

  前言

  近來,有幾個網友發妹兒問了我一些關於WM_NOTIFY通知訊息的使用問題,為此,我寫了這篇文章,將我對WM_NOTIFY訊息的理解闡述如下,希望能對各位有所幫助。

  引入WM_NOTIFY訊息的原因

  1、問題的提出:

  在3.x中,不存在WM_NOTIFY訊息,控制子視窗的通知訊息同選單的命令訊息及加速鍵訊息一樣,均使用WM_COMMAND來傳送,此時,根據WM_COMMAND訊息傳遞的做法,可知道含有如下的傳遞結構:

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

  使用上述結構進行訊息的傳遞時,如果一個通知訊息有一些附加的訊息需要傳送時(如傳遞LVN_COLUMNCLICK時可能需要附加傳送如點選的是那一列等資訊),因為WM_COMMAND僅能傳遞如上的引數,故無法做到。

  2、解決的方案

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

  以WM_DRAWITEM為例:

  lParam引數成為指向DRAWITEMSTRUCT結構的指標,DRAWITEMSTRUCT結構如下:

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

  這樣,就實現了附加引數的傳遞,類似的做法在Windows3.x中隨處可見。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993634/,如需轉載,請註明出處,否則將追究法律責任。

相關文章