VC自定义消息的发送与接收的方法实现
来源:互联网 发布:淘宝网官网电脑版登录 编辑:程序博客网 时间:2024/05/16 01:32
VC自定义消息的发送与接收的方法实现收藏
说明:
由于VC6并不是线程安全的,所以可以使用此技术在VC6中实现线程安全。使用此技术可以在线程中通过发送自定义消息来操作控件。
以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)
发送自定义消息为例,说明这两种不同方法的自定义消息的
1 使用ON_MESSAGE方式实现自定义消息及响应
l 定义消息
l 在.h文件中定义消消响应函数
l 在.cpp中进行消息映射
l 编写消息响应函数代码
1.1 先定义消息
#define WM_MY_MESSAGE (WM_USER+100)
对于发送消息者-MyMessageDlg,
在其MyMessageDlg.h中,定义#define WM_MY_MESSAGE (WM_USER+100)
在其MyMessageDlg.cpp中要先添加:#i nclude "MainFrm.h"
因为使用了CMainFrame*定义对象。
并且要有测试消息的函数:
void MyMessageDlg::OnButtonMsg()
{
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针
CView * active = pMF->GetActiveView();//才能获取当前视类指针
if(active != NULL) //获取了当前视类指针才能发送消息
{
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage发送消息
}
}
对于消息的接受者-MessageTestView,
在其MessageTestView.h中,也要定义#define WM_MY_MESSAGE (WM_USER+100)
1.2 并定义消息映射函数 OnMyMessage()
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
1.3 先要声明响应消息:
在其MessageTestView.cpp中:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
1.4 再添加消息响应的函数实现:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
2 使用ON_REGISTERED_MESSAGE
使用ON_REGISTERED_MESSAGE注册消息,必须配合
static UINT WM_MY_MESSAGE = RegisterWindowMessage("Message");
对于消息的发送者-MyMessageDlg,
在其MyMessageDlg.h中,只要
定义static UINT WM_MY_MESSAGE = RegisterWindowMessage("Message");
就可以了。
在其MyMessageDlg.cpp中要先添加:
#include "MainFrm.h"
因为使用了CMainFrame*定义对象。
并且要有测试消息的函数:
void MyMessageDlg::OnButtonMsg()
{
// TODO: Add your control notification handler code here
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针
CView * active = pMF->GetActiveView();//才能获取当前视类指针
if(active != NULL) //获取了当前视类指针才能发送消息
active->PostMessage(WM_MY_MESSAGE,0,0); //使用PostMessage发送消息
}
对于消息的接收者-MessageTestView,
在其MessageTestView.h中不要定义
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
应该把这个定义放到MessageTestView.cpp中,要不会出现: redefinition
在其MessageTestView.h中只要定义消息映射函数
protected:
//{{AFX_MSG(CMessageTestView)
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,先定义
static UINT WM_MY_MESSAGE=RegisterWindowMessage("Message");
接着注册消息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
//{{AFX_MSG_MAP(CMessageTestView)
ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
//}}AFX_MSG_MAP
最后添加消息响应的函数实现:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
MessageBox("OnMyMessage!");
return 0;
}
----------------------------------------------------------------
比较两种方法,只是略有不同。但也要小心谨慎,以免出现接收不到消息的情况。
-------------------------------------------------------------------
其他注意事项:
发送消息的-MyMessageDlg.cpp前也要定义
static UINT WM_MY_MESSAGE = RegisterWindowMessage("Message");
接受消息的-MessageTestView.cpp前也要定义
static UINT WM_MY_MESSAGE = RegisterWindowMessage("Message");
RegisterWindowMessage("Message")中""的内容是什么不重要,写什么都可以,但是
发送者与接受者必须是一样的内容,例如:"Message"
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- VC自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- vc自定义消息的发送与接收的方法实现
- VC++自定义消息的发送与接收的方法实现
- 人的一生会遇到四个人!
- 标签的用法
- 关于CString总结(转) CString好用但太容易出错了
- The.Ten.Commandments.-摩西十戒
- 页面传值问题(转)
- VC自定义消息的发送与接收的方法实现
- Sun 存储模拟器的使用
- IO:cin.clear() 和 cin.sync() 的区别
- for update的作用
- 窗口样式
- .net下开发Jquery(attr)的用法
- 【转】ffserver和ffmpeg配合完成的实时流媒体服务
- 8位位图
- 软件现场测试,一把锋利的双刃剑