以下内容引自08_利用向导创建mfc_哔哩哔哩_bilibili
创建项目
打开Visual studio,这里使用的是VS2022
直接搜索MFC,选择MFC应用
给项目起个名称,我这里是附加到别的解决方案中,也可以 “创建新的解决方案”
点击创建后弹出下面对话框,应用程序类型先选择“单个文档”,项目样式选择“MFC standard”,然后直接点击“完成”创建项目。
创建完成后,可以发现向导给我们自动创建了四个类:
MFC开发时通常使用类视图
双击类视图中对应的类可以进入对应的头文件,该类中的成员变量及函数则列举在类视图下方,点击即可进入cpp文件。
增加和删除消息映射
想要增加消息映射时,右键CMainFrame类,选择属性-》消息:
例如要添加鼠标左键按下的处理事件,选择WM_LBUTTONDOWN,点击OnLButtonDown
对应的MainFrm.h和cpp文件的分界宏中自动添加如下内容:
也可以通过属性-》消息去删除该消息映射:
Frame“相框”和View“相片 ”
在CMainFrame中增加鼠标左键按下的处理逻辑如下,运行之后可以发现鼠标左键按下后并没有产生期望的效果。
这是因为,Frame相当于一个相框,其实它被View盖住了,在CMFCGuideView中以同样的方式创建鼠标左键的消息映射:
此时运行之后,鼠标左键按下后可以产生期望的效果:
所以显示类的功能最好放在View类中实现,不要放在Frame类中。
绘图
View类中声明了一个OnDraw函数,可以在里面写实现:
运行效果入下:
也可以右键属性,创建WM_PAINT的消息映射:
运行效果如下:
可以看到OnPaint将OnDraw覆盖了,所以有OnDraw之后就最好不要有OnPaint了。
框架中一些重要函数
- InitInstance函数,应用程序类的一个虚函数,MFC应用程序的入口
- PreCreateWindow函数,框架调用CreateEx函数创建窗口时会首先调用此函数,通过修改传入的结构体参数CREATESTRUCT,应用程序可以更改创建窗口的属性,在产生窗口之前让程序员有机会修改窗口的外观,最后再调用CreateWindowEx函数来完成窗口的创建。
- OnCreate函数,是一个响应WM_CREATE消息的函数,在窗口显示前设置窗口的属性如风格、位置等。WM_CREATE消息是由Create函数调用的,窗口创建时(Create)会向操作系统发送WM_CREATE消息。下面引自OnCreate()与PreCreateWindow()_menglongcaiying的博客-CSDN博客
CWnd::Create()/CreateEx()
{
PreCreateWindow();//可以理解为窗口好比一栋建筑,那么PreCreateWindow()要做的就是在还没有建筑的时候将建筑的图纸画出来,而OnCreate()要做的就是根据图纸将建筑构建起来
发送WM_CREATE消息
}
最后,一般会调用OnDraw()函数,绘制窗口上的控件!
- OnDraw和OnPaint,OnPaint是CWnd类成员,OnDraw是CView类成员,没有相应消息的功能,OnPaint通过创建CPaintDC类的DC对象来响应WM_PAINT消息并调用OnDraw函数,通常不必写OnPaint函数。
拓展知识点
MFC中,后缀名为Ex的函数都是拓展函数,以Afx为前缀的函数都是全局函数,可以在程序任意地方调用,例如AfxMessageBox()。