`
weihe6666
  • 浏览: 441730 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

    博客分类:
  • MFC
mfc 
阅读更多
MFC--自定义消息的发送与接收的方法实现


以下用一个自创的对话框类(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"
分享到:
评论

相关推荐

    MFC实现自定义消息发送接收

    两个编辑框,两个按钮实现自定义消息发送接收。

    MFC自定义消息的发送与接收

    除了基本的发送和接收,自定义消息还可以用于实现复杂的通信机制,比如线程间的通信。在多线程应用程序中,使用自定义消息可以在安全的环境下交换数据,避免同步问题。 此外,自定义消息也可以用于封装特定的操作,...

    MFC 自定义消息实现

    自定义消息在MFC中通常通过`WM_USER`开始的数值来定义,这是Windows消息ID预留的范围,以避免与系统内置的消息ID冲突。创建自定义消息通常包含以下几个步骤: 1. **定义消息ID**:首先,你需要定义一个消息ID。这...

    MFC自定义消息示例

    综上所述,MFC自定义消息的使用涉及消息的声明、映射、处理以及发送。理解并掌握这一技术,有助于构建更加灵活和可扩展的MFC应用程序。通过提供的示例代码和实践,开发者可以在win7平台上使用Visual Studio 2010有效...

    MFC 自定义消息和自定义类

    自定义类是MFC中实现特定功能或逻辑的对象,它继承自MFC的基类,并可以添加新的成员变量、方法和消息处理。以下是一个创建自定义类的基本流程: 1. **定义类**: 定义一个新的类,通常是继承自MFC的某个基类,如`...

    自定义消息 MFC 对话框

    1. 发送自定义消息:在MFC中,可以使用`SendMessage`或`PostMessage`函数发送自定义消息。例如,如果你想从一个控件向对话框发送自定义消息,可以这样做: ```cpp SendMessage(GetParent(), myCustomMessage, wParam...

    MFC线程自定义消息循环

    通过以上步骤,你就可以在MFC中为线程创建一个自定义的消息循环,使得线程能够接收和处理消息,从而实现多线程环境下的并发处理。理解并熟练掌握线程消息循环的创建和管理对于开发高效、稳定的多线程MFC应用程序至关...

    MFC发送消息与接收消息的例子

    本文将详细讲解如何利用MFC中的`PostMessage`函数来实现一个发送和接收消息的实例。 首先,理解窗口消息是Windows应用程序间通信的基础。窗口消息由操作系统在应用程序之间传递,用于通知各种事件,如键盘输入、...

    VS2013/MFC基于对话框编程自定义消息

    本示例将深入探讨如何在MFC对话框编程中实现自定义消息。 首先,自定义消息是Windows编程中的一个重要概念,它允许程序员扩展Windows的消息系统,以处理特定于应用程序的需求。自定义消息不同于标准的Windows消息,...

    MFC中如何使用子控件向父控件发送自定义消息

    在Microsoft Foundation Class (MFC) 库中,子控件向父控件发送自定义消息是一种常见的通信方式,尤其在用户界面设计中。这通常涉及到处理窗口消息、定义消息映射以及实现相应的处理函数。以下将详细介绍这个过程。 ...

    兄弟MFC-8220

    至于传真功能,兄弟MFC-8220支持模拟和数字两种方式,可以快速发送和接收传真。驱动程序中的传真软件可能包含电话簿管理、自动重拨、延迟发送等功能,帮助用户高效地处理日常的传真工作。 安装驱动程序的步骤通常...

    MFC自定义消息的使用例子

    以上就是使用MFC自定义消息的基本流程。通过这种方式,你可以根据需要扩展MFC应用程序,实现特定的功能交互,如跨对象通信、状态更新或者特定事件的处理。在实际项目中,可能需要根据具体需求进行更复杂的定制,例如...

    MFC对话框间自定义消息传递四步曲

    本文将详细介绍如何实现两个对话框之间的自定义消息传递,这是一个实用且灵活的方法,可以帮助开发者更好地控制应用程序的交互。 自定义消息传递通常分为四个步骤: 1. **定义自定义消息**: 首先,我们需要定义...

    MFC自定义消息

    本篇文章将深入探讨如何在Visual Studio 2017中实现MFC自定义消息,并利用`SendMessage()`函数进行通信。 首先,我们需要了解MFC的消息系统。MFC是基于Windows消息机制的,它将Windows API中的消息队列、消息循环和...

    MFC自定义消息 示例 (初学者适用,高手就不用下了)

    本文将详细讲解MFC自定义消息的概念、创建方法以及如何在代码中使用,这对于初学者来说是一个很好的学习起点。 首先,自定义消息是在Windows消息队列中定义的非标准消息,它们不是系统预定义的消息,而是由程序员...

    MFC中自由使用自定义消息.doc

    在MFC(Microsoft Foundation Classes)框架中,使用自定义消息...以上就是如何在MFC中定义、处理、发送和接收自定义消息的详细过程。通过这种方式,程序员可以根据需要扩展MFC应用程序的功能,实现更复杂的交互逻辑。

    VC发送自定义消息

    本篇将详细介绍如何在VC++与MFC中发送和处理自定义消息,以及提供的UserMessageDemo示例。 自定义消息的概念: 在Windows API中,消息是进程间通信(IPC)的一种方式,由一个线程发送给另一个线程。系统定义了一...

    MFC中自定义消息处理

    综上所述,在MFC中实现自定义消息处理需要确保类是从`CWnd`派生的,并且正确地定义和实现了消息映射及消息处理器。此外,还需要注意确保窗口句柄的有效性。通过这种方式,可以实现对自定义消息的有效管理和处理,...

Global site tag (gtag.js) - Google Analytics