mfc
因为之后好像会接触到MFC来编写一个界面,所以把鸡啄米的MFC编程入门(http://www.jizhuomi.com/school/c/149.html)看了一下,按照对话框、常用控件一个个讲下去还是很友好的,本日志主要是个人总结感受,同时也可以帮助新手了解一下MFC的操作。
一:基于对话框的MFC主要文件及其关系
创建方式:打开Visual Studio2010 文件->新建->项目->>>MFC应用程序->输入名称如“example37”(解决方案自动与名称相同)->>>完成->>>下一步->>>将“多个文档”勾选掉,选择“基于对话框”->>>完成
这样我们就得到了一些基本的文件,在“解决方案资源管理器”视图里可以看到如图所示的外部依赖项、头文件、源文件、资源文件。
其中Example37.h文件经常用于包含其他的头文件,并已经自动生成对类 CExample37Dlg的声明,从CDialogEx派生而来:class CExample37Dlg : public CDialogEx,常在此类中对一些成员变量进行声明。
Example37Dlg.cpp文件里有一个重要的函数定义。BOOL CExample37Dlg::OnInitDialog() 它表示的是静态的最初的界面,对于一些控件,可以在此添加初始化代码,主要用于设置控件的初始姿态。二:添加控件及变量
在“资源视图”中,IDD_EXAMPLE37_DIALOG是当前所示的界面,可以在上面添加一系列控件,右侧有工具箱...选择所需要的拖动放进来就好,还有一些对齐方式可以操作来使得界面美观。
控件的caption是我们直接可以看到的名称,不作为代码一部分。而ID则是每个控件独一无二的身份,在程序中会被调用,ID可以被修改,毕竟生成的时候相同控件只会增加最后的数字值,当控件多的时候不利于区分,因此需要根据控件的作用,人为修改其ID使得区分方便。
添加一个控件,如一个Edit Control,可以用于输入值、显示值,为了有一个值能够输入与输出,我们需要对该控件“关联”一个变量,因此在控件上右键:添加变量。类别改成Value,变量类型改成doubel,输入名称如“m_editNumb”。这一操作会有两项反应:一是Example37Dlg.h文件里Example37Dlg类的声明会增加一个public类型的数据double m_editNumb;一是Example37Dlg.cpp文件里DoDataExchange 函数增加了 DDX_Text(pDX, IDC_EDIT1, m_editNumb);此函数用于控件与变量之间交换值。需要我们在程序中调用CDialogEx::updatedata()来间接调用DoDataExchange(),括号里需可以填TRUE或者FALSE,TRUE 表示从控件传给变量,FALSE 表示从变量传给数据。默认值是TRUE,即从控件传给变量。FALSE 表示从变量传给数据。默认值是TRUE,即从控件传给变量。
三:添加消息处理函数
消息指的是我们对控件或者对话框进行操作时,发给内部的指令,比如我们在之前定义了变量,需要输入值进行交换,这时就需要我们给一个消息。按下按钮、滑动滑块等等操作都可以添加相应的消息处理函数,来应对我们当前操作所给的消息。
最简单的添加消息处理函数的方式就是双击控件,也可以右键然后“添加事件处理程序”。比如增加一个Button按钮,双击它就会有如下函数:
void CExample37Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
}
简单地,为了实现编辑框内输入数字后,点击Button可以将数字加一,修改代码如下:
void CExample37Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);//数据从控件传入变量
m_editNumb=m_editNumb+1;//变量值加一
UpdateData(FALSE);//数据从变量传入控件
}
这样就完成了。
值得注意的是,一个控件可以有多种丰富的操作,比如按钮就有单击和双击,相应的“添加事件处理程序”的时候,就需要选择BN_CLICKED和BN_DOUBELCLICKED,因此,明确自己所需要的消息类型也是一个查询与积累的过程。
四:添加新的对话框
在“资源视图”中,Dialog上右键“插入Dialog”就可以插入新的对话框,一般来说插入对话框之后需要在对话框上右键“添加类”,不然的话之后添加了控件没有地方去写消息处理函数了对吧。添加类,类名以C开头加上其他大写字母如CM_dialog会自动把开头的C去掉,增加新的M_dialog.h和M_dialog.cpp文件。注意类仍然是CM_dialog
在主对话框中,比如需要点击按钮出现我们自定义的对话框,那么首要的就是在Example37Dlg.cpp里包含新对话框的头文件:#include"M_dialog.h",之后就是构造新对话框类的实体对象CM_dialog newDlg;函数DoModal()可以用于弹出对话框,修改后的函数如下:
void CExample37Dlg::OnBnClickedButton()
{
// TODO: 在此添加控件通知处理程序代码
INT_PTR nRes;// 用于保存DoModal 函数的返回值
CM_dialog newDlg; // 构造对话框类CM_dialog的实例
nRes = newDlg.DoModal(); // 弹出对话框
if (IDCANCEL == nRes) // 判断对话框退出后返回值是否为IDCANCEL,如果是则return,否则继续向下执行
return;
UpdateData(TRUE);//数据从控件传入变量
m_editNumb=m_editNumb+1;//变量值加一
UpdateData(FALSE);//数据从变量传入控件
}
这里要注意DoModal的返回值类型,先进行定义。在使用不同的函数体的时候,需要了解其返回值、形参有哪些。一般来说:类需要有对象,对象才有成员函数。在MFC里往往用一些类封装了很多操作,如使用CFontDialog类封装了字体对话框的所有操作 、使用文件对话框类cfiledialog封装了对文件对话框的操作,于是我们只需要先拿这些类定义下对象(注意所需要的参数),之后就可以拿对象来使用函数了,注意下返回值与参数。不过如CWnd类的成员函数messageBox()和全局函数AfxMessageBox()这样的也可以不用定义对象直接使用,这就比较奇特了。不过感觉主要问题是寻找所需要的类与函数。五:小总结
感觉能够初始化所想要的界面、能够定义变量与对象、能够操作函数使得数据进行传递和处理,一个简单的可操作的界面也不难嘛,所以第一篇日志到这里先告一段落,给自己一点自信嘻嘻,而且毕竟第一次写博客。之后会继续看的!加油!
相关阅读
简介: 本文主要介绍我学习嵌入式的经历。并结合自身的经验希望可以对大家有所帮助。 视频及教材: 郭天祥相关视频及教材,天狼星相
目录: 一、什么是迁移学习? 二、为什么要迁移学习? 三、具体怎么做? 3.1目标数据和原始数据都有标签 3.1.1模型Fine-tune 3.1
大学的计算机课程有哪些 1)大学计算机专业课程:电子技术、离散数学、程序设计、数据结构、操作系统、计算机组成原理、微机系统、
Burp Suite是一个用于测试Web应用程序安全性的图形工具。该工具使用Java编写,由PortSwigger Security开发。该工具有两个版本。可
命令简介: 该命令用来列出目前与过去登录系统的用户相关信息。指令英文原义:show listing of last logged in users 执