MFC之消息映射03

1 消息映射

MFC的消息映射就是类似Qt的事件触发的信号和槽。例如左键被按下事件,触发了cliked按下信号,从而调用相应的槽函数。而MFC也一样,当消息发生,就会调用对应的回调函数。
处理一个消息映射的过程:

  • 1)在要使用消息映射的类中声明消息映射宏DECLARE_MESSAGE_MAP()。
  • 2)在上面类的.cpp文件定义该消息映射宏。
//分界宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
	/*中间为将要注册的回调函数*/
	ON_WM_LBUTTONDOWN() //鼠标左键按下
END_MESSAGE_MAP()
  • 3)回调函数的声明,各种消息事件的回调函数需要查看msdn帮助文档。
  • 4)在上面的分界宏中定义该回调函数。即这四步简记就是两声明两定义。

注意:除了第一步,其余三步的函数名字或者宏注册一般都需要参考帮助文档,因为记不住。

2 案例

下面我们利用消息映射实现鼠标左键被按下,然后执行回调函数,从而实现自己的逻辑。

mfc.h

#pragma once
#include <afxwin.h>

class MyAPP :public CWinApp {
public:
	/* 重写程序入口函数,不需要利用构造调用该函数,该函数自动调用,类似main */
	virtual BOOL InitInstance();
};

class MyFrameWnd :public CFrameWnd {
public:
	MyFrameWnd();
	~MyFrameWnd();

	//声明宏 提供消息映射机制
	DECLARE_MESSAGE_MAP();
	//左键按下回调函数声明
	afx_msg void OnLButtonDown(UINT, CPoint);
};

mfc.cpp

#include "mfc.h"

//有且只有一个应用程序app类对象
MyAPP myapp;

BOOL MyAPP::InitInstance()
{
	// 1 创建窗口类对象(包括newMyFrameWnd对象和调用Create)
	MyFrameWnd *frame = new MyFrameWnd;

	// 2 显示和更新
	frame->ShowWindow(SW_SHOWNORMAL);
	frame->UpdateWindow();

	//3 保存指向应用程序的主窗口的指针
	m_pMainWnd = frame; 

	return TRUE;
}

MyFrameWnd::MyFrameWnd()
{
	Create(NULL, TEXT("MFC"));
}

MyFrameWnd::~MyFrameWnd()
{
}

//分界宏
BEGIN_MESSAGE_MAP(MyFrameWnd, CFrameWnd)/* 参1边为派生类,参2为基类*/
	ON_WM_LBUTTONDOWN() //鼠标左键按下
END_MESSAGE_MAP()

void MyFrameWnd::OnLButtonDown(UINT, CPoint point)
{

	MessageBox(TEXT("左键被按下"));

}

结果:
MFC之消息映射03

上一篇:MFC之菜单相应路由说明和消息分类13


下一篇:MFC之创建第一个MFC程序案例02