MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】

一、创建基于对话框的应用程序框架

  1. 选择菜单项File->New->Project,弹出“New Project”对话框。
  2. 左侧面板中Installed Templated的Visual C++下选择MFC,中间窗口中选择MFC Application,然后在下面的Name编辑框中键入工程名称,本例取名“Addition”,在Location编辑框中设置工程的保存路径。点“OK”。
  3. 点“Next”到“Application Type”(应用程序类型)对话框,在Application type下选择Dialog based(基于对话框),其他使用默认设置,点“Finish”。
    MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第1张图片
    在Resource View视图(资源视图)中可以看到工程Addition的资源树,展开Addition.rc,下面有四个子项:Dialog(对话框)、Icon(图标)、String Table(字符串表)和Version(版本)。然后展开Dialog项,下面有两个对话框模板,其ID分别为:IDD_ABOUTBOX和IDD_ADDITION_DIALOG,前者是“关于”对话框的模板,后者是主对话框的模板。ID是资源的唯一标识,本质上是一个无符号整数,一般ID代表的整数值由系统定义,我们无需干涉。
    MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第2张图片
    二、 自动生成的对话框模板

由上图可见对于主对话框来说,创建对话框第一步中的创建新的对话框模板已经由系统自动完成了。而如果是再添加对话框需要创建新的对话框模板时,需要在Resource View的“Dialog”节点上点右键,在右键菜单中选择“Insert Dialog”,就会生成新的对话框模板,并且会自动分配ID。

在Resource View的资源树中双击某个ID,可在中间区域内显示相应的资源界面。双击IDD_ADDITION_DIALOG时,中间区域就会显示系统自动帮我们生成的Addition对话框模板。如下图:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第3张图片
三、设置对话框属性
在Addition对话框模板上点右键,然后在右键菜单中选择Properties,则在右侧面板中会显示对话框的属性列表。如下图:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第4张图片
在这里对经常使用的几个属性作简单说明,并对Addition对话框进行属性设置说明。

   1.ID:对话框ID,唯一标识对话框资源,可以修改。此处为IDD_ADDITION_DIALOG,我们不修改它。

   2.Caption:对话框标题。我们将其修改为“加法计算器”。

   3.Border:边框类型。有四种类型:None、Thin、Resizing和Dialog Frame。我们使用默认的Dialog Frame。

   4.Maximize:是否使用最大化按钮。我们使用默认的False。

   5.Minimize:是否使用最小化按钮。同样我们使用默认的False。

   6.Style:对话框类型。有三种类型:Overlapped(重叠窗口)、Popup(弹出式窗口)和Child(子窗口)。
   弹出式窗口比较常见。我们使用默认的Popup类型。

   7.System Menu:是否带有标题栏左上角的系统菜单,包括移动、关闭等菜单项。我们使用默认的True。

   8.Title Bar:是否带有标题栏。我们使用默认的True。

   9.Font(Size):字体类型和字体大小。如果将其修改为非系统字体,则Use System自动改为False。
   而如果Use System原来为False,将其修改为True,则Font(Size)自动设置为系统字体。这里我们使用默认的系统字体。    

根据以上说明,其实我们只修改了标题属性。这时我们运行此程序,点击调试后的界面如下:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第5张图片
四、创建对话框资源
1.为对话框添加一个静态文本框(Static Text),用于显示字符串–“被加数”。
VS自动帮我们生成的资源模板中自动添加了一个标题为“TODO:Place dialog controls here.”的静态文本框,我们可以修改它的标题继续使用,也可以删掉它。这里为了学习静态文本框的添加过程,我们将它删掉,继续添加新的静态文本框。
删除控件时,可以使用鼠标左键点击选中它,选中后控件的周围会出现虚线框,然后按Delete键就可以将其删除了。
在添加新的静态文本框以前,先看看Toolbox(工具箱)视图是否显示了,如果没有显示,在菜单栏上点击View->Toolbox即可。Toolbox视图如下图:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第6张图片
Toolbox(工具箱)中列出了一些常用控件,其中有一个是Static Text,即是我们要添加的控件。在Toolbox中的Static Text上点下鼠标左键不放开,并拖到IDD_ADDITION_DIALOG对话框模板上,模板上会出现一个虚线框,我们找到合适的位置松开鼠标左键放下它。
用鼠标左键选中控件后周围出现虚线框,然后鼠标移到虚线框上几个黑点的位置会变成双向箭头的形状,此时就可以按下鼠标左键并拖动来改变控件大小了。我们可以这样改变新添加的静态文本框控件的大小,以更好的显示标题。当然,整个对话框模板也可以用这种方法改变大小。
接下来就该修改静态文本框的文字了。鼠标右键点击静态文本框,在右键菜单中选择“Properties”,Properties面板就会显示出来,在面板上修改Caption属性为“被加数”,ID修改为IDC_SUMMAND_STATIC。此时模板如下图:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第7张图片
2.为对话框添加一个编辑框(Edit Control),用来输入被加数。
添加编辑框的过程与静态文本框类似,在Toolbox中选中Edit Control控件拖到对话框模板上,并使其与之前的静态文本框水平对齐(为了美观),然后调整其大小使之适合被加数的输入。
在编辑框上点右键,仍然在右键菜单中选择“Properties”显示出属性(Properties)面板,修改其ID为IDC_SUMMAND_EDIT。此时模板如下图:
3.按照1的方法添加一个标题为“加数”的静态文本框,用于显示字符串–“加数”。并将其ID改为IDC_ADDEND_STATIC。
4.按照2的方法添加一个ID为IDC_ADDEND_EDIT的编辑框,用来输入加数。
5.按照1的方法添加一个标题为“和”的静态文本框,用于显示文字–“和”。并修改其ID为IDC_SUM_STATIC。
6.按照2的方法添加一个ID为IDC_SUM_EDIT的编辑框,用来显示最终的加和。
7.类似的添加按钮(Button)控件到对话框模板,用于在被点击后触发加法计算。修改其标题为“计算”,ID为IDC_ADD_BUTTON。
到此界面如下所示:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第8张图片
8.删除OK按钮。打开Cancel按钮的属性面板,将标题改为“退出”,并使其与“计算”按钮水平对齐。
9.根据控件的布局,适当调整整个对话框模板的大小,使其相对控件布局来说大小合适,界面美观。
这样在对话框模板中就把我们在本例中需要用到的控件就添加完了。最终效果如下:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第9张图片
创建好对话框资源(就是自己制作添加的界面)后要做的就是生成对话框类了。生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。
本例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。大家用过VC++ 6.0的可能记得,我们定义的对话框类都是从CDialog类派生的,但在VS2010中,一般对话框类都是继承自CDialogEx类。
五、为对话框中的控件添加变量
我们在前面为对话框添加了几个控件,包括三个静态文本框,三个编辑框,一个按钮控件。程序自动生成的Cancel按钮保留,作为退出按钮,而OK按钮删除掉了。
静态文本框只是为了说明后面紧跟的编辑框中数据的意义,是被加数、加数还是和,所以它们是不会变的,我们就不为它们添加变量了。按钮控件是用来操作的,这里也不为它们添加变量。编辑框中的数据可能会经常变化,有必要为它们每个控件关联一个变量。

   首先为被加数的编辑框IDC_SUMMAND_EDIT添加变量。

   1.在编辑框上点右键,在右键菜单中选择“Add Variable”。弹出添加成员变量的向导对话框。

   2.我们想为其添加值变量而不是控件变量,所以对话框中“Category”(类别)下的组合框中选择Value(值)

   3.在“Variable name”中写入自定义的变量名。为其取名m_editSummand。

MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第10张图片
注意,类的成员变量名一般以m_打头,以标识它是一个成员变量。

参照此方法,再分别为加数的编辑框IDD_ADDEND_EDIT添加double型变量m_editAddend、和的编辑框IDD_SUM_EDIT添加double型变量m_editSum。

六、添加消息处理函数
双击按钮添加消息处理函数

最直接最简单的方法就是,双击“计算”按钮,MFC会自动为其在CAdditionDlg类中添加BN_CLICKED消息的处理函数OnBnClickedAddButton()。

七、在消息处理函数中添加自定义功能
我们添加了消息处理函数以后,都得到一个空的OnBnClickedAddButton()函数的函数体,要实现我们想要的功能,还需要在函数体中加入自定义功能代码。

在加法计算器程序中,我们想要“计算”按钮实现的功能是,获取被加数和加数的数值,然后计算它们的和并显示到和的编辑框里。那么,OnBnClickedAddButton()的函数体就应修改为:

void CAdditionDlg::OnBnClickedAddButton()   
{   
    // TODO: Add your control notification handler code here   
	CString strEDIT1, strEDIT2, strEDIT3;
	GetDlgItem(IDC_SUMMAND_EDIT)->GetWindowText(strEDIT1);//从IDC_SUMMAND_EDIT控件获取被加数
	GetDlgItem(IDC_ADDEND_EDIT)->GetWindowText(strEDIT2);
	int a, b, c;
	a = _ttol(strEDIT1);//将CString转换为int,double,float等数据类型
	b = _ttol(strEDIT2);
	c = a + b;
	strEDIT3.Format(_T("%d"), c);
	SetDlgItemText(IDC_SUM_EDIT, strEDIT3);在ID为IDC_SUM_EDIT的控件上显示转换为CString字符串的数据
}

MFC入门常用函数和数据类型
这里解释5个知识点:

CString:MFC控件从面板上得到数据一般是CString
GetDlgItem(控件ID)->GetwindowText(CString字符串):获取ID号为xxx的CString字符串
_ttol(CString字符串):将CString转换为int,double,float等数据类型
CString字符串.Format(_T("%d"),类型为int、double、float的数据):将这样的数据转换为CString
SetDlgItemText(控件ID,CString字符串):在ID为xxx的控件上显示转换为CString字符串的数据

结果为:
MFC学习教程第一个程序之(MFC中创建一个基于对话框的应用程序,用来实现加法运算的功能)——参考【鸡啄米】_第11张图片

你可能感兴趣的:(MFC学习)