今天向同学请教了下MFC的入门问题,当真有种“听君一席话,胜读十年书”的感觉。我个人以为每个学习C++控制台类型编程的新手都希望能够把小黑窗变为交互简单的窗口程序,这就促使我们学习MFC。
之前学习MFC最大的愿望就是可以吧之前写的Win32控制台程序轻松的转化到MFC界面程序上来,要实现这一点需要完成以下功能:
1.实现MFC控件(暂时为Edit控件)与数据的绑定,变量值可以在界面和后台之间传递
2.实现MFC事件响应和函数的绑定。
本文的主要目的不是教你如何使用VS“编写”MFC程序,而在于把我们之前养成的书写控制台习惯的代码合理的转化为MFC代码(前提是你的代码完全符合C++面向对象的标准)
首先明确一点MFC是纯C++面向对象风格的类库,故我们要写的后台程序必须全部要以类和类成员函数来实现<-这点非常重要。
下面就一个简单的加法界面程序作为加入MFC世界的敲门砖:
在正常的WIn32控制台程序中,我们如果编写一个面向对象风格的加法类代码如下:
class CAdd
{
public:
int a,b,c;
CAdd();
void add();
}
CAdd::CAdd()
{
a = 0;
b = 0
c = 0;
}
void CAdd::add()
{
c = a+b;
}
如果我们再加入main()函数然后传递点参数啥的,它就可以在黑框框里和用户“交互”了。但这不是我们想要的!!!
下面我们把上面的程序变成MFC对话框程序.
1.创建基于对话框的MFC项目
2.将下面代码加入到XXDlg.h中
class CAdd
{
public:
int a,b,c;
CAdd();
void add();
};
3.把下面代码加入到XXDlg.cpp中
CAdd::CAdd()
{
a = 0;
b = 0
c = 0;
}
void CAdd::add()
{
c = a+b;
}
4.现在代码是加进来了,下面要做的就是变量和文本输入框的绑定了,首先将向导创建的资源对话框改为下面的样子:
在属性栏中将三个示例编辑框的ID改为IDC_A,IDC_B,IDC_C(这么做完全是为了方便,也可以使用默认ID)。
5.下面一步是关键:变量a,b,c关联到三个示例编辑框中,这么做以后变量和编辑框之间就可以进行数据传递了。
别忘了在XXDlg类中创建一个CAdd的对象实例
public:
CAdd Add;
然后找到XXDlg类中的
void CADDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}函数,在里面添加代码为—>
void CADDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_A,Add.a);
DDX_Text(pDX, IDC_B,Add.b);
DDX_Text(pDX, IDC_C,Add.c);
}
下面三个语句就实现了文本编辑框A,B,C和变量a,b,c之间的绑定。
6.下面一步是将button的响应函数设置为我们的add()函数,具体代码如下:
void CADDDlg::OnBnClickedButton1()
{
UpdateData(true);//将控件的状态传给其关联的变量,当然你要为控件关联上变量才行。//用于将屏幕上控件中的数据交换到变量中。
Add.add();
UpdateData(false);//将控件的关联变量的值传给控件并改变控件状态。//用于将数据在屏幕中对应控件中显示出来
}
其中UpdateData()函数起到传递刷新数据的作用。
7.编译运行就可以得到下图的界面,单击button就可以实现加法