榕树驿站

要是生命真的有如果,就不会有这么多的遗憾;要是等一分钟可以如愿,就不会有这么多的伤感...
posts(11) comments(13) trackbacks(0)
  • C++博客
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • 编程技术(5)
  • 基础学习(5)
  • 脚本技术
  • 心情小站(1)

随笔档案

  • 2007年6月 (2)
  • 2007年4月 (9)

文章分类

  • 军事看台
  • 舞文弄墨
  • 政治经济

技术好友

  • nianshao's blog

搜索

  •  

最新评论

  • 1. re: Select模型[未登录]
  • 扯淡的东西
    select是这样用的吗
  • --123
  • 2. re: vc自定义消息的发送与接收的方法实现
  • 非常详细,谢谢分享
  • --holmsLI
  • 3. re: Select模型
  • 写得很好了 谢谢 哈哈
  • --jemmyLiu
  • 4. re: vc自定义消息的发送与接收的方法实现[未登录]
  • @华可
    谢谢你,能否加个博客链接?
  • --榕树藤
  • 5. re: vc自定义消息的发送与接收的方法实现
  • 评论内容较长,点击标题查看
  • --华可

阅读排行榜

评论排行榜

View Post

vc自定义消息的发送与接收的方法实现

以下用一个自创的对话框类(MyMessageDlg)向视图类(MessageTestView)
发送自定义消息为例,说明这两种不同方法的自定义消息的

消息传递的方法一:使用ON_MESSAGE
使用ON_MESSAGE响应消息,必须配合定义消息#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()
{
    // 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中,也要定义#define WM_MY_MESSAGE (WM_USER+100)
并定义消息映射函数-OnMyMessage()
protected:
 //{{AFX_MSG(CMessageTestView)
 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
在其MessageTestView.cpp中,
先要声明响应消息:
BEGIN_MESSAGE_MAP(CMessageTestView, CEditView)
 //{{AFX_MSG_MAP(CMessageTestView)
 ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
 //}}AFX_MSG_MAP
再添加消息响应的函数实现:
LRESULT CMessageTestView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
 MessageBox("OnMyMessage!");
 return 0;
}


消息传递的方法二:使用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中要先添加:#i nclude "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"

posted on 2007-04-18 08:52 榕树藤 阅读(18854) 评论(7)  编辑 收藏 引用 所属分类: 编程技术

View Comments

# re: vc自定义消息的发送与接收的方法实现  回复  更多评论   
谢谢!!!!!!!!
写的很详细了
2009-03-30 21:20 | 刘辉
# re: vc自定义消息的发送与接收的方法实现  回复  更多评论   
写得很好,直观明了。
2009-10-16 15:17 | crystalshine
# re: vc自定义消息的发送与接收的方法实现  回复  更多评论   
写的很好,转载一下~
2009-11-06 11:16 | sink
# re: vc自定义消息的发送与接收的方法实现  回复  更多评论   
很详细,谢谢!!
2010-05-05 09:22 | 某某
# re: vc自定义消息的发送与接收的方法实现  回复  更多评论   
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd; //先通过获取当前框架指针
CView * active = pMF->GetActiveView();//才能获取当前视类指针
运行此出错的,需要改成CMainFrame * hwd = (CMainFrame *)AfxGetMainWnd();
2011-08-28 17:14 | 华可
# re: vc自定义消息的发送与接收的方法实现[未登录]  回复  更多评论   
@华可
谢谢你,能否加个博客链接?
2011-08-29 09:44 | 榕树藤
# re: vc自定义消息的发送与接收的方法实现  回复  更多评论   
非常详细,谢谢分享
2012-05-24 12:57 | holmsLI
刷新评论列表

只有注册用户登录后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
  • VC6.0编译器参数设置
  • VC中基于 Windows 的精确定时
  • STL实践指南
  • 使用VC6.0实现窗口的任意分割
  • vc自定义消息的发送与接收的方法实现
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


 
Powered by:
C++博客
Copyright © 榕树藤