mfc消息映射

在windows程序设计中 消息是核心 在windows编程模型中 消息是最重要的

在sdk api 做windows程序设计的时候 是在窗口过程中有一个大大的switch 对各种各样的消息进行处理

那么在mfc里面 对消息进行处理 mfc 用了一种非常简化的方法 很容易的进行消息的处理 这种方法叫做消息映射

因为这种方法比传统的 sdk api 要简单很多 

 

MFC 使用 c++语言把 WINDOWS SDK API 函数包装成几百个类 我们可以直接去使用类而不要直接去使用API函数 我们既可以使用MFC的类使用面向对象的方法 也可以继续在MFC里面去调用API函数 有时候必须要使用API函数

最重要的两个MFC类

CWinApp windows应用程序对象类

CFrameWnd  框架窗口对象类

所有的MFC类它的名称第一个字面都是大C 

 

对一个窗口来说 就要处理大量的消息 MFC 它把所有要处理的消息都给做好了 微软做了100多个消息处理程序 这些我们都可以继承使用,但它里面都是空的 如果我们需要处理消息就写一个消息映射 通知MFC 有一些消息我们要自己处理

QQ截图20181224171341.png

微软在MFC里做消息处理的时候 没有使用继承 因为有大量的消息要处理 如果使用继承那么必须使用虚函数 我们每一个继承就要把这个虚函数进行重写 每一次继承就会产生虚表 就有可能产生大量的虚表 会影响MFC运行速度 那么微软就采用了另外一种方法叫消息映射

QQ截图20181224172435.png

用了一些非常复杂的宏来进行消息映射

头文件

#include <afxwin.h>
class CMapp : public CWinApp
{
public:
	virtual BOOL InitInstance(); //初始化实例 公有虚函数
};
class Cwindow : public CFrameWnd { //框架窗口类
public:
	Cwindow();
protected:
	afx_msg void OnPaint();
	afx_msg void OnLButtonDown(UINT nFlags,CPoint point); //消息处理函数
	DECLARE_MESSAGE_MAP();
};

源文件

#include "Hello.h"
CMapp myapp;
//初始化实例
BOOL CMapp::InitInstance(){
	this->m_pMainWnd = new Cwindow(); //创建主窗口
	this->m_pMainWnd->ShowWindow(this->m_nCmdShow); //显示出来
	this->m_pMainWnd->UpdateWindow();//更新
	return TRUE;
}
//开始消息映射宏
BEGIN_MESSAGE_MAP(Cwindow, CFrameWnd)
	ON_WM_PAINT()//PAINT 绘制消息
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

Cwindow::Cwindow() { 
	this->Create(NULL,TEXT("hello")); //创建出来
}
void Cwindow::OnPaint() {//处理绘制消息 paint消息
	CPaintDC dc(this); 
	dc.Ellipse(100,100,200,200); 
	CRect rect;
	this->GetClientRect(&rect); //当前窗口内部客户区大小
	dc.DrawText(TEXT("hello"),-1,&rect,
		DT_SINGLELINE|DT_CENTER|DT_VCENTER);
}
void Cwindow::OnLButtonDown(UINT nFlags, CPoint point) {
	this->MessageBox(TEXT("hello"));
}

写一个消息映射声明 就可以在源文件处理一些相关消息映射代码  声明格式是固定的 都是微软提供好的 每一个消息映射要对应一个消息处理函数

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《mfc消息映射

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)