分析與理解通知訊息-WM_NOTIFY (轉)
分析與理解通知訊息-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中隨處可見。
鄭力群
前言
近來,有幾個網友發妹兒問了我一些關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分析與理解訊息反射機制 (轉)反射
- Laravel 訊息通知Laravel
- Laravel——訊息通知Laravel
- 鴻蒙傳送訊息通知鴻蒙
- 訊息通知系統記錄
- redis學習(七) 訊息通知Redis
- 訊息通知 使用 [ Web-msg-sender]Web
- Android呼叫訊息欄通知(Notification)Android
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- 自定義訊息和對訊息的理解
- windows10怎麼關閉通知欄訊息|windows10通知欄訊息關閉的方法Windows
- 訊息通知(Notification)系統最佳化
- MFC訊息響應機制分析 (轉)
- 3d touch怎麼清理通知訊息 3d touch一鍵清理通知訊息方法詳解3D
- 深入VCL 理解BCB的訊息機制 (一) (轉)
- 全面理解Handler-1:理解訊息佇列,手寫訊息佇列佇列
- RabbitMQ實戰:理解訊息通訊MQ
- 理解訊息佇列(MQ)佇列MQ
- C# 使用SignalR實現訊息通知C#SignalR
- Laravel 訊息通知原始碼閱讀筆記Laravel原始碼筆記
- 觀察者模式-將訊息通知給觀察者模式
- CommunityToolkit.Mvvm8.1 訊息通知(4)UnityMVVM
- 截獲與管理Windows的訊息 (轉)Windows
- 自定義訊息獲取訊息(轉)
- 訊息機制篇——初識訊息與訊息佇列佇列
- WIN10如何設定通知中心不顯示訊息 WIN10通知中心不顯示訊息設定方法Win10
- QT滑鼠訊息分析QT
- X-Admin&ABP框架開發-訊息通知框架
- Laravel 7 訊息通知日期序列化解決方案Laravel
- 百度小程式模板訊息通知示例 - LaravelLaravel
- win10系統通知訊息怎麼遮蔽Win10
- 理解 Android 訊息機制Android
- iOS 訊息傳送與轉發詳解iOS
- OC訊息機制,訊息轉發機制
- 如何除錯ucenter中傳送的api通知訊息除錯API
- Android學習系列(7)--App訊息通知機制AndroidAPP
- iOS 訊息轉發iOS