消息处理的总结
2008-08-06 12:48
246 查看
消息的映射[/b][/b]
一[/b]:[/b]消息的数据结构[/b][/b]
定义一个消息结构 typedef struct tagMSG{
HWND hWnd; //窗口对象的标识符,该条消息传递到它所标示的窗口
UNIT message;//消息标识符,标识某个特定的消息
WPARAM wParam;//随同消息传递的16为参数
LPARAM lParam;//随同消息传递的32为参数
DWORD time;//消息产生时间
POINT pt;产生消息时光标在屏幕上的坐标
}MSG;
Typedef MSG FAR *LPMSG;
二[/b]:windows [/b]对消息的处理[/b][/b]
对所发生的没一件事,windows将其转换成消息的形式放在一个称为消息队列的内存中,然后由windows的消息发送程序选择合适的对象,将消息发送到接收消息的对象上。
Windows 通过一段消息循环的代码来轮询应用程序的消息队列。
典型的消息循环形式为:
MSGmsg;
While (GetMessage(&msg,NULL,0,0L))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
函数GetMessage从应用程序消息队列中检索出一条消息,并将他存于具有MSG类型的变量中,然后交由函数TranslateMessage对消息进行翻译,然后由函数DispatchMessage将消息发送到适当的对象上。
三:[/b]MFC[/b]对消息的处理和发送[/b][/b]
MFC采用一种消息影映射制来决定如何处理特定的消息。消息映射机制拥有一组宏,用来标识消息处理函数、映射类成员函数和对应的消息等。
用 afx_msg 放在函数返回类型前面,来标记它是一个消息处理函数。
类中如果很有消息处理函数,那么还需要加上一个DECLARE_MESSAGE_MAP()宏来初始化程序执行部份所定义的消息映射。
例:class CMainFrame:CFrameWnd{
Public :
CMainFrame();
Protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate( CMainFrame);
afx_msg void OnEditCopy();
afx_msg void OnClose();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
映射宏用来指定消息处理函数与消息的对应关系。
例子的消息映射宏:
BEGIN_MESSANG_MAP(CMainFrame, CFrameWnd)
ON_WN_CREATE()//用来指定默认的成员函数OnCreate与WM_CREAE相对应
ON_COMMAND( ID_EDIT_COPY,OnEditCopy)
ON_WN_CLOSE()
END_MESSAGE_MAP()
(1)ON_WN_CREATE()//用来指定默认的成员函数OnCreate与WM_CREAE相对应
(2)ON_COMMAND(command, command_function) 其i中command为菜单消息或用户自定义消息,command_function,为消息处理函数。
(3)自定义消息,常量WM_USER和第一个消息值相对应,用户必须为自己的消息定义相对于WM_USER的偏移量,偏移量在0~0x3FFF之间,可以利用#define直接定义自己的消息。如: #define WM_USER1(WM_USER+0)
#define WM_USER2(WM_USER+1)
在类中的定义 afx_msg OnUser1(WPARAM wParam, LPARAM lParam)
在映射宏中 ON_WM_USER1( On_User1, WM_USER1)
四:发送[/b] [/b]
Windows 提供了三个发送消息的函数,SendMessage、PostMessage、SendDlgItemMessage.
用SendMessage向窗口发送消息:
LRESULT SendMessage(
HWND hWnd, // 消息要发送的窗口句柄
UINT Msg,// 要发 送的消息
WPARAM wParam // 消息的第一个参数
LPARAM lParam // 消息的第二个参数
);
用PostMessage向窗口发送消息:
BOOL PostMessage(
HWND hWnd, // 消息要发送的窗口句柄
UINT Msg,// 要发 送的消息
WPARAM wParam // 消息的第一个参数
LPARAM lParam // 消息的第二个参数
};
用SendDlgItemMessage函数向对话框的某个控制发送消息。
LONG SendDlgItemMessage(
HWND hDlg, // 对话框句柄
Int nIDDlgItem, // 对话框控件的ID
UINT Msg,// 要发 送的消息
WPARAM wParam // 消息的第一个参数
LPARAM lParam // 消息的第二个参数
一[/b]:[/b]消息的数据结构[/b][/b]
定义一个消息结构 typedef struct tagMSG{
HWND hWnd; //窗口对象的标识符,该条消息传递到它所标示的窗口
UNIT message;//消息标识符,标识某个特定的消息
WPARAM wParam;//随同消息传递的16为参数
LPARAM lParam;//随同消息传递的32为参数
DWORD time;//消息产生时间
POINT pt;产生消息时光标在屏幕上的坐标
}MSG;
Typedef MSG FAR *LPMSG;
二[/b]:windows [/b]对消息的处理[/b][/b]
对所发生的没一件事,windows将其转换成消息的形式放在一个称为消息队列的内存中,然后由windows的消息发送程序选择合适的对象,将消息发送到接收消息的对象上。
Windows 通过一段消息循环的代码来轮询应用程序的消息队列。
典型的消息循环形式为:
MSGmsg;
While (GetMessage(&msg,NULL,0,0L))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
函数GetMessage从应用程序消息队列中检索出一条消息,并将他存于具有MSG类型的变量中,然后交由函数TranslateMessage对消息进行翻译,然后由函数DispatchMessage将消息发送到适当的对象上。
三:[/b]MFC[/b]对消息的处理和发送[/b][/b]
MFC采用一种消息影映射制来决定如何处理特定的消息。消息映射机制拥有一组宏,用来标识消息处理函数、映射类成员函数和对应的消息等。
用 afx_msg 放在函数返回类型前面,来标记它是一个消息处理函数。
类中如果很有消息处理函数,那么还需要加上一个DECLARE_MESSAGE_MAP()宏来初始化程序执行部份所定义的消息映射。
例:class CMainFrame:CFrameWnd{
Public :
CMainFrame();
Protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate( CMainFrame);
afx_msg void OnEditCopy();
afx_msg void OnClose();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
映射宏用来指定消息处理函数与消息的对应关系。
例子的消息映射宏:
BEGIN_MESSANG_MAP(CMainFrame, CFrameWnd)
ON_WN_CREATE()//用来指定默认的成员函数OnCreate与WM_CREAE相对应
ON_COMMAND( ID_EDIT_COPY,OnEditCopy)
ON_WN_CLOSE()
END_MESSAGE_MAP()
(1)ON_WN_CREATE()//用来指定默认的成员函数OnCreate与WM_CREAE相对应
(2)ON_COMMAND(command, command_function) 其i中command为菜单消息或用户自定义消息,command_function,为消息处理函数。
(3)自定义消息,常量WM_USER和第一个消息值相对应,用户必须为自己的消息定义相对于WM_USER的偏移量,偏移量在0~0x3FFF之间,可以利用#define直接定义自己的消息。如: #define WM_USER1(WM_USER+0)
#define WM_USER2(WM_USER+1)
在类中的定义 afx_msg OnUser1(WPARAM wParam, LPARAM lParam)
在映射宏中 ON_WM_USER1( On_User1, WM_USER1)
四:发送[/b] [/b]
Windows 提供了三个发送消息的函数,SendMessage、PostMessage、SendDlgItemMessage.
用SendMessage向窗口发送消息:
LRESULT SendMessage(
HWND hWnd, // 消息要发送的窗口句柄
UINT Msg,// 要发 送的消息
WPARAM wParam // 消息的第一个参数
LPARAM lParam // 消息的第二个参数
);
用PostMessage向窗口发送消息:
BOOL PostMessage(
HWND hWnd, // 消息要发送的窗口句柄
UINT Msg,// 要发 送的消息
WPARAM wParam // 消息的第一个参数
LPARAM lParam // 消息的第二个参数
};
用SendDlgItemMessage函数向对话框的某个控制发送消息。
LONG SendDlgItemMessage(
HWND hDlg, // 对话框句柄
Int nIDDlgItem, // 对话框控件的ID
UINT Msg,// 要发 送的消息
WPARAM wParam // 消息的第一个参数
LPARAM lParam // 消息的第二个参数
相关文章推荐
- Android消息处理机制之AsyncTask使用总结
- C++Builder 自定义消息 处理 总结
- Android编程实现异步消息处理机制的几种方法总结
- Android-消息处理学习总结(Handler,Looper)
- C# 消息处理学习总结
- VC++中对于处理消息的学习总结
- Android基础总结(7)——异步消息处理
- Windows消息队列,UI线程,窗口以及消息处理方式总结
- Android消息处理机制认识过程总结
- java微信公众号开发总结(2)——文本消息处理
- Windows消息队列,UI线程,窗口以及消息处理方式总结
- Windows消息队列,UI线程,窗口以及消息处理方式总结
- Unity3D 可重载虚函数总结(事件,回调函数,消息处理)
- Android事件处理方法总结-Handler消息处理
- Android多线程,异步消息处理机制, Thread, AsyncTask 简单总结
- 个人总结android消息处理机制:Looper,Handler,Message
- Android异步消息处理机制总结笔记
- java项目消息处理总结
- [Unity3D] 可重载虚函数总结(事件,回调函数,消息处理)
- Android事件处理方法总结-Handler消息处理