从零开始学MFC(3)———消息映射机制

 相对于Qt的信号与槽机制,MFC提供了一套消息映射机制来处理各种消息。

 步骤:

1、声明宏,写到.h中

DECLARE_MESSAGE_MAP()

2、分界宏 写到.cpp中

BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)

//消息宏

END_MESSAGE_MAP()

3、找消息宏 写到 分界宏中

4、把函数原型 声明写到.h中

5、函数的实现写到.cpp中


完整示例:

mfc.h

#include <afxwin.h>

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

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

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

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

main.cpp

#include "mfc.h"

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

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

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

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

	return TRUE;
}

//分界宏
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)

	//各种消息宏
	ON_WM_LBUTTONDOWN() //鼠标左键按下(key)
	ON_WM_CHAR()  //键盘(key)
	ON_WM_PAINT() //绘图(key)

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); 
	//dc.TextOutW(100, 100, TEXT("Fighting!"));
	//画椭圆 矩形内切圆
	dc.Ellipse(10, 10, 300, 300);
}
 这里面(MFC)的MessageBox不同于Win32的MessageBox,仅需提供一个参数即可。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值