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中通常通过`WM_USER`开始的数值来定义,这是Windows消息ID预留的范围,以避免与系统内置的消息ID冲突。创建自定义消息通常包含以下几个步骤: 1. **定义消息ID**:首先,你需要定义一个消息ID。这...
综上所述,MFC自定义消息的使用涉及消息的声明、映射、处理以及发送。理解并掌握这一技术,有助于构建更加灵活和可扩展的MFC应用程序。通过提供的示例代码和实践,开发者可以在win7平台上使用Visual Studio 2010有效...
自定义类是MFC中实现特定功能或逻辑的对象,它继承自MFC的基类,并可以添加新的成员变量、方法和消息处理。以下是一个创建自定义类的基本流程: 1. **定义类**: 定义一个新的类,通常是继承自MFC的某个基类,如`...
1. 发送自定义消息:在MFC中,可以使用`SendMessage`或`PostMessage`函数发送自定义消息。例如,如果你想从一个控件向对话框发送自定义消息,可以这样做: ```cpp SendMessage(GetParent(), myCustomMessage, wParam...
通过以上步骤,你就可以在MFC中为线程创建一个自定义的消息循环,使得线程能够接收和处理消息,从而实现多线程环境下的并发处理。理解并熟练掌握线程消息循环的创建和管理对于开发高效、稳定的多线程MFC应用程序至关...
本文将详细讲解如何利用MFC中的`PostMessage`函数来实现一个发送和接收消息的实例。 首先,理解窗口消息是Windows应用程序间通信的基础。窗口消息由操作系统在应用程序之间传递,用于通知各种事件,如键盘输入、...
本示例将深入探讨如何在MFC对话框编程中实现自定义消息。 首先,自定义消息是Windows编程中的一个重要概念,它允许程序员扩展Windows的消息系统,以处理特定于应用程序的需求。自定义消息不同于标准的Windows消息,...
在Microsoft Foundation Class (MFC) 库中,子控件向父控件发送自定义消息是一种常见的通信方式,尤其在用户界面设计中。这通常涉及到处理窗口消息、定义消息映射以及实现相应的处理函数。以下将详细介绍这个过程。 ...
至于传真功能,兄弟MFC-8220支持模拟和数字两种方式,可以快速发送和接收传真。驱动程序中的传真软件可能包含电话簿管理、自动重拨、延迟发送等功能,帮助用户高效地处理日常的传真工作。 安装驱动程序的步骤通常...
以上就是使用MFC自定义消息的基本流程。通过这种方式,你可以根据需要扩展MFC应用程序,实现特定的功能交互,如跨对象通信、状态更新或者特定事件的处理。在实际项目中,可能需要根据具体需求进行更复杂的定制,例如...
本文将详细介绍如何实现两个对话框之间的自定义消息传递,这是一个实用且灵活的方法,可以帮助开发者更好地控制应用程序的交互。 自定义消息传递通常分为四个步骤: 1. **定义自定义消息**: 首先,我们需要定义...
本篇文章将深入探讨如何在Visual Studio 2017中实现MFC自定义消息,并利用`SendMessage()`函数进行通信。 首先,我们需要了解MFC的消息系统。MFC是基于Windows消息机制的,它将Windows API中的消息队列、消息循环和...
本文将详细讲解MFC自定义消息的概念、创建方法以及如何在代码中使用,这对于初学者来说是一个很好的学习起点。 首先,自定义消息是在Windows消息队列中定义的非标准消息,它们不是系统预定义的消息,而是由程序员...
在MFC(Microsoft Foundation Classes)框架中,使用自定义消息...以上就是如何在MFC中定义、处理、发送和接收自定义消息的详细过程。通过这种方式,程序员可以根据需要扩展MFC应用程序的功能,实现更复杂的交互逻辑。
在Windows应用程序开发中,串口通信是连接计算机与外部设备,如...MFC下的32位串口编程提供了灵活度与便利性的平衡,使得开发者可以根据项目需求选择适合的方法。了解和掌握这些基础知识对于编写串口通信程序至关重要。
本篇将详细介绍如何在VC++与MFC中发送和处理自定义消息,以及提供的UserMessageDemo示例。 自定义消息的概念: 在Windows API中,消息是进程间通信(IPC)的一种方式,由一个线程发送给另一个线程。系统定义了一...