MFC教程
Mango酱
这个作者很懒,什么都没留下…
展开
-
MFC之文档视图案例30
1 文档视图案例的初始化1)创建基于单文档的MFC程序,但是到下图步骤时,需要换一下视图的继承基类为CFormView。。这样下面我们就多出了FORM这个对话框,以前单文档继承于CView时是没有对话框的,所以无法操作控件。2)然后按如下所示添加控件。其中模式为GroupBox容器,需要注意Group里面的ID顺序。3)将Group第一个控件即编辑单选框的Group属性置为true。4)然后将上一个下一个这两个按钮添加变量。5)这里将编辑模式时,上一个,下一个这两个按钮为灰色,预览模式时为原创 2021-02-18 15:04:16 · 438 阅读 · 0 评论 -
MFC之对于文档类的DeleteContents和OnNewDocument说明29
1 文档类的DeleteContents和OnNewDocument说明DeleteContents和OnNewDocument在每次创建新的文档之前都会被调用,而DeleteContents比OnNewDocument优先调用。DeleteContents主要做创建前清理工作,而OnNewDocument主要是创建文档。说这一点主要是为了说明每次创建文档都会调用这两个函数,所以在创建新文档时的一些初始化放在这两个函数,一般放在DeleteContents,所以注意不要按照平常放在构造函数。...原创 2021-02-17 21:38:23 · 584 阅读 · 0 评论 -
MFC之Archive和文档类Serilize函数使用28
1 ArchiveArchive的操作就相当于Qt的QDataStream,都是以二进制关联文件使用。下面我们以打开菜单栏某个选项写文件,某个选项读文件。1)我们创建基于单个文档的项目。2)添加读写选项,分别创建读写的处理事件函数。类列表选择继承于框架。3)编写代码。void CMainFrame::OnAchiveWrite(){ // TODO: 在此添加命令处理程序代码 CFile file; bool ret = file.Open(TEXT("./test.txt"),原创 2021-02-17 20:53:14 · 304 阅读 · 0 评论 -
MFC之文档视图结构及其相互访问介绍27
1 文档视图结构介绍之前我们讲过文档和视图的区别,文档就是存储数据,视图就是用于显示和修改数据的。然后文档分为单文档和多文档,创建项目时可以根据需要创建。单文档和多文档的区别就是下图:下面就是多文档,有四个,而单文档则只有一个。接着我们使用代码讲解文档就是存储数据,视图就是用于显示和修改数据的。//在文档类中CString str;//在视图类中xxx *pDoc = GetDocument();//获取文档类对象pDoc->str = TEXT("123");//修改数据上面原创 2021-02-16 23:05:17 · 231 阅读 · 0 评论 -
MFC之标签控件26
1 标签控件1)先创建基于对话框的项目。2)添加TabControl控件到对话框。3)由于这个标签控件是唯一需要添加额外代码的,所以我们需要添加额外的代码进去项目当中。TabSheet.h#if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)#define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_#if原创 2021-02-16 20:57:15 · 1403 阅读 · 0 评论 -
MFC之树形控件25
1 树形控件先了解相关知识。1)创建基于对话框的项目。2)删除对话框原有的内容,添加树形控件TreeControl。3)右击树形控件属性,然后添加相应属性。4)在资源视图里面右击icon文件夹,添加资源,选择icon导入预先准备好的图片。5)由于我们需要在节点中显示图片,所以我们需要准备一个成员变量的图片列表。CImageList m_imageList;6)关联属性控件。右击树形控件添加Control变量即可。7)编写代码。一般树形控件的初始化代码都是放在对话框的初始化函数On原创 2021-02-16 20:11:01 · 331 阅读 · 0 评论 -
MFC之列表控件24
1 列表控件1)新建基于对话框的项目。2)添加列表控件ListControl,然后修改属性为Report。列表控件显示改变为竖立。3)添加变量。4)在对话框的OnInitDialog函数初始列表控件。// CliebiaokongjianDlg 消息处理程序BOOL CliebiaokongjianDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须原创 2021-02-15 22:00:24 · 431 阅读 · 1 评论 -
MFC之滑块与旋转控件23
1 滑块首先看看滑块相关的内容。从sitch看到,滑块分为五个内容,分别是矩形滑块位置,滑块左右两边的箭头,和矩形滑块分别距离左右两边的空间。1)先添加滑块控件和显示矩形滑块的位置编辑区。2)右击编辑区添加变量为int类型。3)添加滑块为控件Control类型。4)由于滑块的矩形进度条是没有处理事件的,所以我们需要处理其父类的处理事件,也就是对话框的事件。所以我们去到对话框的属性的处理事件添加以下滑块的事件。5)然后我们先在OnInitDialog函数初始化滑块的初始位置和范围。BO原创 2021-02-15 21:05:38 · 391 阅读 · 0 评论 -
MFC之列表框与组合框22
1 列表框先了解列表框的相关内容。1)新建基于对话框的项目。然后添加如下控件。空白的是列表框ListBox。2)给编辑区控件添加value类型的CString类型变量。3)给列表框添加Control类型的ListBox类型变量。4)双击添加按钮,去到响应函数编辑代码。void CliebiaokuangDlg::OnBnClickedButton2(){ // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE);//先获取编辑区的内容到变量 if (m_st原创 2021-02-14 22:56:42 · 788 阅读 · 0 评论 -
MFC之单选框,复选框的使用21
1 单选框的使用1)首先了解部分内容。2)创建新的项目,选择基于对话框的MFC标准。3)首先将对话框原有的内容删除。然后添加一个GroupBox容器。4)添加几个单选框进去。5)使用Ctrl+D查看GroupBox容器内的单选框是否按照顺序。可以看到是按顺序的,若在同一组容器不是顺序的,可能出错。这里忽略一下按钮,看前四个。6)设置属性,使同组内的第一个按钮的Group为true。7)添加按钮,用于检测用户选择的单选框。8)开始编码。首先是初始化单选框的默认值。在对话框的初始化原创 2021-02-14 18:45:43 · 1837 阅读 · 0 评论 -
MFC之CEdit的简单使用20
1 CEdit的简单使用我们本篇将实现将编辑区1的内容拷贝到编辑区2。1)先了解控件的相关属性。2)改变编辑区的属性。3)按下CTRL+点击所选的控件,即编辑区和按钮,复制一份。4)为两个编辑区添加变量。可以通过类向导查看是否添加成功。5)编写按钮的响应函数代码,实际上按钮2可以不用处理。我这里不处理,没什么作用。所以只处理一个按钮即可。void CjiyuduihuakDlg::OnBnClickedButton5(){ // TODO: 在此添加控件通知处理程序代码 //获原创 2021-02-14 15:57:49 · 905 阅读 · 0 评论 -
MFC之关联变量19
1 关联变量上一篇我们在讲自定义控件的时候如何关联变量,但是那种关联的是自定义控件类,并且选择Control,代表一个类只能关联一个对象变量。而我们这里所讲的关联变量是传统的类型,即已有的类,选择的类型不是Control,而是Value,例如CString,int这些。1)右击添加变量。2)按如下选择,这样对话框类就多出一个成员变量。2 关联变量简单案例实际上面就已经与对话框关联完变量,下面我们简单演示一下使用这个变量,按下按钮获取CEdit的内容。1)添加一个按钮。2)双击按钮跳到槽函原创 2021-02-14 15:38:31 · 592 阅读 · 0 评论 -
MFC之自定义控件(逃跑的按钮)和在按钮加载位图18
1 自定义控件(逃跑的按钮)1)首先创建基于对话框的项目。2)创建自定义按钮类。注意一下,此时的自定义类与对话框还没关系,区别前几篇自定义对话框的做法(自定义对话框有关联)。3)然后在对话框中添加一个按钮,右击添加变量。此时在对话框类会有一个成员变量类型MyButton。现在我们对话框和自定义的按钮类就关联上了。4)由于我们要实现的是自定义按钮的逃跑事件,即把按钮当做窗口,所以我们需要在自定义按钮类中实现按钮的鼠标移动事件。添加鼠标移动事件就是右击MyButton类点击属性,然后选择右方原创 2021-02-14 14:29:50 · 761 阅读 · 0 评论 -
MFC之基于对话框开发的框架介绍17
1 基于对话框开发的框架介绍1)首先项目创建时和之前带菜单栏的有一点区别,就是在选择单个文档改成基于对话框的选项。2)然后对对话框里面的类和成员函数介绍,因为它与带菜单栏的类有区别。首先包含三个类。然后先介绍应用程序的成员函数,它包含构造和程序入口函数。然后是对话框类,DoDataExchange主要用于控件和变量的关联和交换。OnInitDialog用于对话框的初始化工作。OnPaint主要是与绘图相关。然后剩余成员函数很少用。最后还有一个关于对话框类,不需要熟悉,知道就行原创 2021-02-13 17:30:23 · 363 阅读 · 0 评论 -
MFC之模态非模态与自定义对话框16
1 模态非模态对话框由于我们这里使用按下菜单栏的选项弹出对话框,所以放在框架类中使用。注意:按下选项可以使用左键按下事件或者选项对应的处理事件。我们使用后者,这点需要区分好。‘1)先在菜单栏添加对话框的选项。2)在资源视图添加对话框。3)添加模态对话框的处理程序。4)上面创建好了模态对话框,这里开始创建非模态对话框,重复2,3步骤即可。5)编写模态对话框代码。void CMainFrame::OnDialogExecmt(){ // TODO: 在此添加命令处理程序代码 CD原创 2021-02-13 16:02:43 · 291 阅读 · 0 评论 -
MFC之图标(标题)的动态使用15
1 图标(标题)的动态使用我们将实现左上角动态图标的显示。首先按照向导创建新的项目。由于我们的图标是属于框架,所以在框架类处理。1)首先在框架类定义图标数组用于存储图片,我这里有四张所以大小为4。private: HICON m_icon[4];2)在项目文件下的res目录中添加图片。3)然后在资源视图中选择icon目录,右击属性添加资源,将刚刚的四个图片选择导入。4)在框架类的构造函数加载图标。CMainFrame::CMainFrame(){ m_icon[0] = Afx原创 2021-02-12 22:59:34 · 427 阅读 · 0 评论 -
MFC之菜单栏的相关使用14
1 菜单栏选项的打勾,加粗,禁用首先我们需要知道菜单栏包含子菜单栏,依次使用下标去区分。然后拿到子菜单栏后,就可以操作里面的选项了。可以通过下标,选项的ID(在资源视图的菜单栏的图,点击选项右击属性即可获取)进行操作。代码:由于为了减少视图的工作量,并且根据上一篇菜单栏的消息路由,框架也可以处理菜单栏的消息,所以代码放在框架类的OnCreate处理。int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CFrameWnd::On原创 2021-02-12 18:01:26 · 1179 阅读 · 0 评论 -
MFC之菜单相应路由说明和消息分类13
1 菜单相应路由说明菜单里面的选项按下时,会触发消息,但是这个消息是先被接收到又被谁先处理呢?下面我们简单看看。1)按向导创建MFC程序后,按下面任意添加菜单栏的选项。2)依次对下面四个类进行添加编辑,创建对应的回调函数。3)上面创建完4个回调函数后,那么按下按钮后,它会调用哪个回调函数先呢?经过测试,它依次先调用视图->文档->框架->应用程序。但是并不能说明MFC菜单栏的消息路由是这个顺序的。实际上菜单栏的消息路由的消息是先被框架类接收,但是框架不处理,先交给视图处理,原创 2021-02-12 17:55:12 · 230 阅读 · 0 评论 -
MFC之利用定时器实现渐变字12
1 利用定时器实现渐变字思路:先设置定时器,然后利用定时器触发WM_TIMER信号进入回调函数,进而处理渐变字。具体方法是使用画矩形的方法去使字体渐变,即把每个字体当做一个矩形,过程如下。int CjianpianziView::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 //1 设置定时器,此后会原创 2021-02-12 14:45:47 · 280 阅读 · 0 评论 -
MFC之创建插入符,写字,换行与退格11
概述:我们按照前面文章根据向导创建项目。1 创建插入符由于插入符是在创建窗口后并且做我们用户操作前需要使用。所以我们将插入符的创建放在OnCreate函数中即WM_CRATE信号。int CInsertFuView::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CClientDC dc(this)原创 2021-02-11 23:17:02 · 868 阅读 · 2 评论 -
MFC之位图加载10
1 位图加载步骤1)在项目的res目录中添加位图,mfc好像只支持bmp格式。2)然后点击左下角的类视图,再右击项目名,选择添加资源。点击位图后,选择导入。3)选择刚刚添加的bmp图片即可。4)然后找到该位图控件的唯一ID。资源视图找不到可以去解决方案下点击xxx.rc即可弹出这个框。5)写代码。只看位图的代码即可。void CMFC_FirstView::OnDraw(CDC* pDC){ CMFC_FirstDoc* pDoc = GetDocument(); ASSERT_VAL原创 2021-02-11 17:23:23 · 1921 阅读 · 0 评论 -
MFC之画笔与画刷的使用09
1 画笔与画刷的使用画笔和画刷的使用步骤:/*1 定义画家(已有),将形参注释去掉2 定义画笔(或者画刷)并将交给画家3 开始操作*/案例:在绘图回调OnDraw中写。void CMFC_FirstView::OnDraw(CDC* pDC){ CMFC_FirstDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 /* 1 定义画家(已有原创 2021-02-11 14:59:59 · 431 阅读 · 0 评论 -
MFC之画连续的直线08
1 画连续的直线的思路1)鼠标按下,记录要开始画直线的起点。2)鼠标移动时,终点作为下一次的起点。3)由于鼠标会抬起,所以需要标志位去记录鼠标的按下与抬起,即鼠标按下才画图,不按下不按图。鼠标按下事件:void CMFC_FirstView::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnLButtonDown(nFlags, point); //鼠标按下记录起点 m原创 2021-02-11 11:09:19 · 432 阅读 · 0 评论 -
MFC之字符集与拓展讲解MFC函数名规范07
1 字符集字符集分为ASNI多字节字符集和UNICODE宽字节字符集。1)多字节字符集:一个字母代表一个字节,一般用于纯字母数字,例如欧洲国家。2)UNICODE宽字节字符集:一个字母代表两个字节或者三个字节。例如中文一般代表三个字节。所以这就是我们在MFC下需要使用:TEXT(),_T()函数进行转换称宽字节字符集了。并且一般字符串都会使用TCHAR这些类型直接自适应(利用条件编译)宽字节和多字节字符集。UINT或者TCHAR转成CSting。 TCHAR ch = (TCHAR)n原创 2021-02-11 10:27:28 · 215 阅读 · 0 评论 -
MFC之自动添加事件消息处理函数06
1 自动添加事件消息处理函数06注意:本篇是接上一篇按向导创建后的代码,并无修改,全是自动生成的框架实验,只是添加了一句MessageBox打印MFC的语句。1)点击类视图,右击某个类的属性,例如这里点击视图类的属性。2)然后点击消息。3)选择消息类型。4)添加。这样就会在该类创建了前面手动添加消息映射消息宏,回调处理这些内容,非常方便。但是有一点需要注意:当你想鼠标在视图按下,你不能将该属性创建在框架类,规则鼠标按下的回调函数不会被触发,即使在边边按下也不行,因为被视图覆盖了该消息。结果原创 2021-02-10 22:49:33 · 1028 阅读 · 0 评论 -
MFC之根据向导创建真正的MFC程序05
概述:前面我们演示了自己定义的类去实现MFC相关的内容,但是实际MFC开发一般都是利用向导创建的,那些代码都不需要我们自己打,只是为了理解。1 根据向导创建真正的MFC程序1)按下面步骤创建。然后一直按下一步。直到这里:创建完成后,看代码建议使用类视图看,方便。2 分析上面四个类2.11 视图是用于显示和修改数据的,即客户区。2 应用程序有且只有一个,不需要太深入。3 文档类是用于存储数据的,一般是抽象的存在。4 框架类可以理解为是一个容器,用于装载视图。例如下图原创 2021-02-10 22:18:29 · 188 阅读 · 0 评论 -
MFC之利用消息映射实现绘图事件处理04
1 利用消息映射实现绘图事件处理实际上消息映射非常简单,上一篇我们实现了左键按下的案例,本来两篇想弄在一起,但是还是将绘图分开来写。只是想强调:CPaintDC只能在OnPaint绘图,CClientDC可以任意地方绘图。2 案例mfc.h#pragma once#include <afxwin.h>class MyAPP :public CWinApp {public: /* 重写程序入口函数,不需要利用构造调用该函数,该函数自动调用,类似main */ virtual原创 2021-02-10 21:20:14 · 297 阅读 · 0 评论 -
MFC之消息映射03
1 消息映射MFC的消息映射就是类似Qt的事件触发的信号和槽。例如左键被按下事件,触发了cliked按下信号,从而调用相应的槽函数。而MFC也一样,当消息发生,就会调用对应的回调函数。处理一个消息映射的过程:1)在要使用消息映射的类中声明消息映射宏DECLARE_MESSAGE_MAP()。2)在上面类的.cpp文件定义该消息映射宏。//分界宏BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd) /*中间为将要注册的回调函数*/ ON_WM_LBUTTONDOWN(原创 2021-02-10 21:07:13 · 229 阅读 · 0 评论 -
MFC之创建第一个MFC程序案例02
1 创建项目首先VS2015创建项目,选择Win32项目,然后选择Windows应用程序,空项目。然后添加mfc.h,mfc.cpp。2 案例需要注意,CWinApp类似Qt的QApplication,CFrameWnd类似QWeiget。创建流程:1)有且只有一个应用出现类继承于CWinApp,并且需要重写InitInstance入口函数。2)接着是窗口类的实现。1 创建窗口类对象(包括newMyFrameWnd对象和调用Create)。2 显示和更新。3 保存指向应用程序的主窗口的指原创 2021-02-10 20:19:32 · 361 阅读 · 0 评论 -
MFC之底层窗口实现01(包括windows窗口消息机制)
1 MFC需要了解的相关概念1) SDK和APISDK: 软件开发工具包(Software Development Kit),一般都是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合,也称第三方工具包。API函数: Windows操作系统提供给应用程序编程的接口(Application Programming Interface)。Windows应用程序API函数是通过C语言实现的,所有主要的 Windows 函数都在 Windows.h 头文件中进行原创 2021-02-10 14:18:09 · 449 阅读 · 1 评论