一、窗口建立
创建桌面项目,建立类似如下两个文件
在项目中,找到“高级”->“MFC的使用”,修改为下图所示
注意,如果在后面的运行中出现缺少mfcXXX,dll的情况,请自行下载对应组件后放入系统文件(system32/syswow64)中。如果仍旧不行,请核对上诉修改的配置器是否为编译时使用的(release/debug,86/64)。
mfc.h文件中:
#pragma once
#include<afxwin.h>
//应用程序类
class MyApp :public CWinApp {
public:
//该处为MFC程序的入口地址
virtual BOOL InitInstance();
private:
};
//框架类
class MyFrame :public CFrameWnd {
public:
MyFrame();
private:
};
mfc.cpp中
#include "mfc.h"
#pragma once
MyApp myApp;//全局唯一的MyAPP对象,代表整个进程实例
BOOL MyApp::InitInstance(){
/*
1.创建框架类对象
2.显示窗口
3.更新窗口
4.保存框架类对象指针
*/
MyFrame* frame = new MyFrame;
//显示窗口,此处用的正常显示
frame->ShowWindow(SW_SHOWNORMAL);
//更新窗口
frame->UpdateWindow();
//保存框架类对象指针
m_pMainWnd = frame;
return TRUE;
}
MyFrame::MyFrame(){
//CWnd类的成员函数
//CFrameWnd继承于CWnd
//类名(NULL表示用默认名),标题,之后有默认值
Create(NULL,TEXT("MFC"));
}
结果
1.一个MFC程序中,有且只有一个全局应用程序类对象(myApp)
2.在程序入口函数实现功能(InitInstance())
2-1.为框架类的准备一个无参构造函数,使用CWnd::Create,完成成员的初始化
2-2.创建MyFrame对象,并为其分配空间
2-3.为框架类设置显示模式
2-4.调用框架类对象的更新窗口函数
2-5.保存框架类的指针
二、事件处理
消息映射
1.在框架类中,声明消息映射宏
//框架类
class MyFrame:public CFrameWnd {
public:
MyFrame();
//声明消息映射宏
DECLARE_MESSAGE_MAP()
private:
};
2.在实现文件中类外定义消息宏
3.程序会在Begin与End之间不断循环,在其间添加事件,该事件发生时会返回消息映射宏。
//定义消息宏
//派生类,基类
BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)
ON_WM_LBUTTONDOWN()//鼠标左键被点击
END_MESSAGE_MAP()
4.为事件声明其处理函数
//框架类
class MyFrame:public CFrameWnd {
public:
MyFrame();
//声明消息映射宏
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT, CPoint);
private:
};
5.于MFC.cpp中实现它
void MyFrame::OnLButtonDown(UINT, CPoint){
MessageBox(TEXT("鼠标左键被点击"));
}
结果:
绘图事件
相同方式,声明消息处理函数
afx_msg void OnPaint();
绘图事件
ON_WM_PAINT()
实现部分
cdc为绘画实例,构造时需填入指被画对象(this)
void MyFrame::OnPaint(){
CPaintDC cdc(this);
cdc.TextOutW(100,100,TEXT("你好MFC"));//x轴,y轴,文字
}