1.首先看看HANDLE_MSG消息分流器:
#define HANDLE_MSG(hwnd,message,fn) case (message): return HANDLE_##message((hwnd),(wParam),(lParam),(fn))
就拿WM_COMMAND来说,替换后就成为case ( WM_COMMAND): return HANDLE_WM_COMMAND((hwnd),(wParam),(lParam),( Main_OnCommand))
2.那 HANDLE_WM_COMMAND 怎么定义呢?在windowsx.h有:
#define HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0)
再次替换之后就成为:(( Main_OnCommand)( (hwnd), ( int)(LOWORD(wParam )), ( HWND)(lParam), (UINT)HIWORD(wParam)),0)
3.对应关系为void Main_OnCommand(HWND hwnd, int id , HWND hwndCtl, UINT codeNotify)
在看看WM_COMMAND的定义:
HWND hwnd , // handle to window
WM_COMMAND , // the message to send
WPARAM wParam , // notification code and identifier, 高字是消息,低字是产生消息的控件的ID
LPARAM lParam // handle to control (HWND), 产生消息的控件的句柄
其他的类同
#define HANDLE_MSG(hwnd,message,fn) case (message): return HANDLE_##message((hwnd),(wParam),(lParam),(fn))
就拿WM_COMMAND来说,替换后就成为case ( WM_COMMAND): return HANDLE_WM_COMMAND((hwnd),(wParam),(lParam),( Main_OnCommand))
2.那 HANDLE_WM_COMMAND 怎么定义呢?在windowsx.h有:
#define HANDLE_WM_COMMAND(hwnd,wParam,lParam,fn) ((fn)((hwnd),(int)(LOWORD(wParam)),(HWND)(lParam),(UINT)HIWORD(wParam)),0)
再次替换之后就成为:(( Main_OnCommand)( (hwnd), ( int)(LOWORD(wParam )), ( HWND)(lParam), (UINT)HIWORD(wParam)),0)
3.对应关系为void Main_OnCommand(HWND hwnd, int id , HWND hwndCtl, UINT codeNotify)
在看看WM_COMMAND的定义:
HWND hwnd , // handle to window
WM_COMMAND , // the message to send
WPARAM wParam , // notification code and identifier, 高字是消息,低字是产生消息的控件的ID
LPARAM lParam // handle to control (HWND), 产生消息的控件的句柄
其他的类同
本文详细解读了WM_COMMAND消息在Windows系统中的处理流程,包括消息分流器HANDLE_MSG和HANDLE_WM_COMMAND的定义及作用,以及如何通过这些机制实现对命令消息的高效响应。
6182

被折叠的 条评论
为什么被折叠?



