利用向导创建MFC程序

 以下内容引自08_利用向导创建mfc_哔哩哔哩_bilibili

创建项目

打开Visual studio,这里使用的是VS2022

利用向导创建MFC程序_第1张图片

 直接搜索MFC,选择MFC应用

利用向导创建MFC程序_第2张图片

给项目起个名称,我这里是附加到别的解决方案中,也可以 “创建新的解决方案”

利用向导创建MFC程序_第3张图片

点击创建后弹出下面对话框,应用程序类型先选择“单个文档”,项目样式选择“MFC standard”,然后直接点击“完成”创建项目。

利用向导创建MFC程序_第4张图片 创建完成后,可以发现向导给我们自动创建了四个类:

利用向导创建MFC程序_第5张图片

MFC开发时通常使用类视图

利用向导创建MFC程序_第6张图片利用向导创建MFC程序_第7张图片

双击类视图中对应的类可以进入对应的头文件,该类中的成员变量及函数则列举在类视图下方,点击即可进入cpp文件。

增加和删除消息映射

想要增加消息映射时,右键CMainFrame类,选择属性-》消息:

利用向导创建MFC程序_第8张图片利用向导创建MFC程序_第9张图片

例如要添加鼠标左键按下的处理事件,选择WM_LBUTTONDOWN,点击OnLButtonDown

 对应的MainFrm.h和cpp文件的分界宏中自动添加如下内容:

利用向导创建MFC程序_第10张图片

利用向导创建MFC程序_第11张图片

利用向导创建MFC程序_第12张图片也可以通过属性-》消息去删除该消息映射:

Frame“相框”和View“相片 ”

在CMainFrame中增加鼠标左键按下的处理逻辑如下,运行之后可以发现鼠标左键按下后并没有产生期望的效果。

利用向导创建MFC程序_第13张图片

 这是因为,Frame相当于一个相框,其实它被View盖住了,在CMFCGuideView中以同样的方式创建鼠标左键的消息映射:

利用向导创建MFC程序_第14张图片

此时运行之后,鼠标左键按下后可以产生期望的效果:

利用向导创建MFC程序_第15张图片

 所以显示类的功能最好放在View类中实现,不要放在Frame类中。

绘图 

 View类中声明了一个OnDraw函数,可以在里面写实现:

利用向导创建MFC程序_第16张图片

运行效果入下:

利用向导创建MFC程序_第17张图片

也可以右键属性,创建WM_PAINT的消息映射:

利用向导创建MFC程序_第18张图片

运行效果如下:

利用向导创建MFC程序_第19张图片

可以看到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()。 

你可能感兴趣的:(MFC,C++,mfc,c++)