用户自定义消息,以及消息传递的参数设定
2012-04-14 23:44
218 查看
有的时候窗口需要收发消息来达到某种效果或目的。而且用户可以自定义消息,并可以携带参数。
此文浅谈介绍如何自定义消息和参数的设置。
/////////////////////////////////////////////////////////
新建对话框工程,命名为Dialog
DialogDlg.h类头文件中定义客户消息宏 ,如下
#define WM_MYOWNMESSAGE WM_USER + 100
DialogDlg.h类中声明消息处理函数如下
afx_msg void OnOwnMessage(WPARAM wp, LPARAM lp);
DialogDlg.cpp消息映射中关联自定义消息与消息处理函数,如下
BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)
//{{AFX_MSG_MAP(CDialogDlg)
ON_MESSAGE(WM_MYOWNMESSAGE, OnOwnMessage) /* 关联消息映射 */
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
DialogDlg.cpp函数功能实现
void CDialogDlg::OnOwnMessage(WPARAM wp, LPARAM lp)
{
// 此处添加处理
}
就绪。。。
剩下的就是在调用处,发送此消息给CDialogDlg。让CDialogDlg做出回应。
/////////////////////////////////////////////////////////
字符串做参数------
发送:
char* szsend = "this is text";
SendMessage(hwnddlg, WM_MYOWNMESSAGE, (WPARAM)(char*)sztext, 0);
接受:
char szreceive[128];
memcpy(&szreceive, (char*)wp, 128); // 注意处理溢出,此处不详解
MessageBox(szreceive);
结构体做参数------
typedef struct _tagINFO{
char name[128];
int age;
}INFO, *LPINFO;
发送:
INFO info;
memset(&info, 0, sizeof(INFO));
info.age = 12;
strcpy(info.name, "Jack");
::SendMessage(hwnddlg, WM_MYOWNMESSAGE, (WPARAM)(LPINFO)&info, 0);
接收:
INFO rinfo;
memcpy(&rinfo, (LPINFO)wp, sizeof(INFO));
MessageBox(rinfo.name);
还有需要注意的是
1 消息参数的生存周期问题。当函数返回时,分配在栈里的空间被回收,参数也会失效。
2 SendMessage()与PostMessage()的使用区别。
此文浅谈介绍如何自定义消息和参数的设置。
/////////////////////////////////////////////////////////
新建对话框工程,命名为Dialog
DialogDlg.h类头文件中定义客户消息宏 ,如下
#define WM_MYOWNMESSAGE WM_USER + 100
DialogDlg.h类中声明消息处理函数如下
afx_msg void OnOwnMessage(WPARAM wp, LPARAM lp);
DialogDlg.cpp消息映射中关联自定义消息与消息处理函数,如下
BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)
//{{AFX_MSG_MAP(CDialogDlg)
ON_MESSAGE(WM_MYOWNMESSAGE, OnOwnMessage) /* 关联消息映射 */
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
DialogDlg.cpp函数功能实现
void CDialogDlg::OnOwnMessage(WPARAM wp, LPARAM lp)
{
// 此处添加处理
}
就绪。。。
剩下的就是在调用处,发送此消息给CDialogDlg。让CDialogDlg做出回应。
/////////////////////////////////////////////////////////
字符串做参数------
发送:
char* szsend = "this is text";
SendMessage(hwnddlg, WM_MYOWNMESSAGE, (WPARAM)(char*)sztext, 0);
接受:
char szreceive[128];
memcpy(&szreceive, (char*)wp, 128); // 注意处理溢出,此处不详解
MessageBox(szreceive);
结构体做参数------
typedef struct _tagINFO{
char name[128];
int age;
}INFO, *LPINFO;
发送:
INFO info;
memset(&info, 0, sizeof(INFO));
info.age = 12;
strcpy(info.name, "Jack");
::SendMessage(hwnddlg, WM_MYOWNMESSAGE, (WPARAM)(LPINFO)&info, 0);
接收:
INFO rinfo;
memcpy(&rinfo, (LPINFO)wp, sizeof(INFO));
MessageBox(rinfo.name);
还有需要注意的是
1 消息参数的生存周期问题。当函数返回时,分配在栈里的空间被回收,参数也会失效。
2 SendMessage()与PostMessage()的使用区别。
相关文章推荐
- 用户自定义消息,以及消息传递的参数设定
- 给自定义用户控件传递参数
- cocos2dx EventListenerCustom类控制事件的分发 处理不同层之间的事件传递以及自定义用户数据
- Android 自定义PopupWindow以及参数传递与返回
- springMVC 参数传递之:数组,Map,List,Set以及自定义复杂类型参数
- 给自定义用户控件传递参数
- 用户如何在VC中自定义消息以及响应该消息
- MFC 自定义消息四步曲与在参数中传递变量
- 【转载+修改】MFC 自定义消息四步曲与在参数中传递变量
- Android学习笔记_23_服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数
- 用户自定义类型(User-defined Type)参数的传递
- 向用户自定义页面(.ascx)传递参数
- 自定义view时使用xml传递参数-设定TextView中图片大小
- MFC 自定义消息四步曲与在参数中传递变量
- Android学习笔记_23_服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数
- 消息传递的参数设定
- mfc自定义消息 wparam lparam 参数传递指针
- Android 自定义Dialog以及参数的传递
- 如何给自定义用户控件传递参数
- asp.net中调用用户控件中的函数并传递参数