mfc 学习的第三天

mfc 学习的第三天

消息映射

消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTONDOWN消息的处理程序,然后就调用OnLButtonDown。

下面是将消息映射添加到一个类中所做的全部工作:
1、所操作类中,声明消息映射宏
2、通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。

mfc.h

//框架类CFrameWnd,派生类(子类)
class MyFrame:public CFrameWnd
{
public:
	MyFrame(); //构造函数

	//声明消息映射,必须用在类声明中
	DECLARE_MESSAGE_MAP()
}

mfc.cpp

//定义消息宏,必须用在类实现中
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)//开始
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP() //结束

MyFrame::MyFrame()
{
	Create(NULL,TEXT("mfc"));//创建窗口
}

3、对应消息处理函数分别在类中声明,类外定义

mfc.h

//框架类CFrameWnd,派生类(子类)
class MyFrame:public CFrameWnd
{
public:
	MyFrame(); //构造函数

	//声明消息映射,必须用在类声明中
	DECLARE_MESSAGE_MAP()

	//鼠标左击处理函数声明
	afx_msg void OnLButtonDown(UINT,CPoint);
}

mfc.cpp

//定义消息宏,必须用在类实现中
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)//开始
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP() //结束

MyFrame::MyFrame()
{
	Create(NULL,TEXT("mfc"));//创建窗口
}

//鼠标左击处理函数的定义
void MyFrame::OnLButtonDown(UINT,CPoint)
{
	MessageBox(TEXT("鼠标左键"));
}

4 消息映射机制
4.1 声明宏 写到.h中
4.2 分界宏 写到.cpp中
4.3 找消息宏 写到 分界宏 中间
4.4 把函数原型 声明写到.h中
4.5 函数的实现写到.cpp中
4.6 鼠标、键盘、绘图

mfc.h的源码

#include <afxwin.h>  //mfc头文件

class  MyApp:public CWinApp //继承CWinApp应用程序类
{
public:
	//程序入口 
	virtual BOOL InitInstance();
};  

class MyFrame:public CFrameWnd //继承窗口框架类
{
public:
	MyFrame();


	//声明宏 提供消息映射机制
	DECLARE_MESSAGE_MAP();

	afx_msg void OnLButtonDown(UINT, CPoint);
	afx_msg void OnChar(UINT, UINT, UINT);
	afx_msg void OnPaint();

};

mfc.cpp的源码

#include "mfc.h"


MyApp app;  //全局应用程序对象,有且仅有一个

BOOL MyApp::InitInstance()
{
	//创建窗口
	MyFrame * frame = new MyFrame;

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

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

	return TRUE; //返回正常初始化
} 


//分界宏
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
	ON_WM_LBUTTONDOWN() //鼠标左键按下
	ON_WM_CHAR() //键盘
	ON_WM_PAINT() //绘图
END_MESSAGE_MAP()

MyFrame::MyFrame()
{
	Create(NULL, TEXT("mfc"));
}

void MyFrame::OnLButtonDown(UINT, CPoint point)
{
	/*TCHAR buf[1024];
	wsprintf(buf, TEXT("x=%d,y=%d"), point.x, point.y);

	MessageBox(buf);*/

	//mfc中的字符串 CString
	CString str;
	str.Format(TEXT("x=%d,,,y=%d"), point.x, point.y);
	MessageBox(str);

}

void MyFrame::OnChar(UINT key, UINT, UINT)
{
	CString str;
	str.Format(TEXT("按下了%c键"), key);
	MessageBox(str);
}

void MyFrame::OnPaint()
{
	CPaintDC dc(this);  //在父类CDC里找其他的能画的图形

	dc.TextOutW(100, 100, TEXT("为了部落!"));
	//画椭圆
	dc.Ellipse(10, 10, 100, 100);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shark_xk88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值