博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
发送自定义消息
阅读量:4983 次
发布时间:2019-06-12

本文共 1395 字,大约阅读时间需要 4 分钟。

说明:

以下用一个自创的对话框类(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中要先添加:#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中,也要定义#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;
}

其中PostMessage最好用以下的方法代替:

 CWnd*   pWnd = FindWindow(NULL, L"接受窗口");

 pWnd->SendMessage(WM_MY_MESSAGE,0,0); 

PS:如何设置接受窗口的名字:this->SetWindowsText(L"接受窗口");

转载于:https://www.cnblogs.com/lingyun1120/archive/2011/11/11/2245593.html

你可能感兴趣的文章
2.VUE前端框架学习记录二
查看>>
洛谷P3703 【[SDOI2017]树点涂色】
查看>>
Linux项目发布流程
查看>>
python跨行 print:多用(),换行符\要小心,少用+或者不用(其它程序代码跨行用\就行,不能用括号)...
查看>>
自己不懂的SQL语句用法
查看>>
C++ 函数指针
查看>>
.NET调用新浪微博开放平台接口的代码示例(转)
查看>>
四种百度文库资源直接下载的方法!不用代码,不用券!一键搞定!
查看>>
数据库-包和包体
查看>>
软件的知识产权保护
查看>>
7.20-7.24
查看>>
Bower前端包管理器
查看>>
Python练习题 047:Project Euler 020:阶乘结果各数字之和
查看>>
Docker私有仓库Harbor部署与使用
查看>>
2017年4月26日
查看>>
(第十周)Beta-2阶段成员贡献分
查看>>
希尔排序与快速排序
查看>>
洛谷p1966 火柴排队 (逆序对变形,目标排序
查看>>
SAE中Python无法创建多线程的解决方案
查看>>
Linux用户管理
查看>>