【摘要】本文适合已经完整学习了C++面向对象机制,但在开发窗体程序方面还是零基础的同学。通过本文的引导进行实践体验,目的是消除同学们开发窗体程序的神奇感,为下一步的自学找到感觉。同一时候,能更深入地体会到编程基本功的根源所在,在今后能自觉地学好专业基础课,而不是仅仅浮躁地追求开发平台和表面的技能。文章最后给出进一步实践的建议。
【相关博文】C++“窗体”程序设计启蒙(之中的一个)
class Triangle
{
public:
    Triangle(){a=1;b=1;c=1;}   //设计默认构造函数,即不指定參数时,默认各边长为;
    Triangle(double x, double y, double z) {a=x; b=y; c=z;} //使用带參数构造函数,即Triangle(doublex, double y, double z),三边长在调用时由实參直接给出
    double perimeter(void);//计算三角形的周长
    double area(void);//计算并返回三角形的面积
private:
    double a,b,c;//三边为私有成员数据
};
 
double Triangle::perimeter(void) 
{
     return (a +b + c); 
} 
 
double Triangle::area(void) 
{
   double s =(a + b + c) / 2;   
    return sqrt(s * (s - a) * (s - b) * (s - c));  
}  写出这点代码已经是小case,后面运算符重载、继承、多态、虚函数等真功夫还没用呢!选择菜单->文件->新建,在“项目类型”中选择“MFC”,右边的“模板”中选“MFC应用程序”,然后在项目“名称”处为项目命名,如图1所看到的:
   (图1)
 (图1)
点击“确定”后,见图2:
   (图2)
 (图2)
再点“下一步”,见图3:
   (图3)
 (图3)
当最后点击“完毕”之后,在出现的界面上就能够安排所须要的控件了。
先认识一下例如以下的设计界面(图4),再讲怎样在界面上安排控件。
   (图4)
 
(图4)
(2)类视图:当中列出了项目中出现的全部类,能够查看这些类的数据成员、成员函数,以及这些类的“基类型”。(建议一定要看一看,这对理解我们刚刚学过的抽象类的理解非常有帮助。例如以下图是逐级打开CtriangleApp类的基类,最后查看到顶级基类CObject的情形。~CObject()是个虚函数,是虚析构函数,准确地讲,还是纯虚函数,因而CObject是抽象类,回想或复习我们在多态性和虚函数部分的内容,回想当时提出的在软件project方面的考虑,……)
   (图5)
 
(图5)
在你开发程序的过程中,(1)-(5)是时时须要用到的部件。可是,有时界面上并不能找到。假设哪一个东东“失踪”了,首先要看看整个界面,是否“停靠”在了哪个边缘。另外,点击“视图”菜单,如图6,你能够在这里找到你的所需。
   (图6)
 
(图6)
回到图4的界面,从“工具箱”中找到“Static Text”(静态文本)控件,拖到对话框中;在“属性”中,将Caption属性改为“a”(理解:Caption为该类的一个数据成员),如图7所看到的:
   (图7)
 
(图7)
 (图8)
(图8) (图9)
(图9)class Triangle
{
public:
    Triangle(){a=1;b=1;c=1;}  
    Triangle(double x, double y, double z) {a=x; b=y; c=z;} 
    double area(void);
private:
    double a,b,c;
};  添?头文件的界面如图10所看到的: (图10)
 
(图10)#include "stdafx.h"
#include <Cmath>
#include "MyTriangle.h"
double Triangle::area(void) 
{ 
    double s =(a + b + c) / 2;   
    return sqrt(s * (s - a) * (s - b) * (s - c));  
}  将类的声明放在头文件里,而实现的代码分放在还有一个源文件里,是项目开发中的一般做法,要学会和习惯于这样做。显然,本例中这么一点代码就占一个文件显得夸张了。 (图11)
(图11)void CtriangleDlg::OnBnClickedButton1()
{
	// TODO: 在此加入?控件通知处理程序代码
	UpdateData();   //将把界面上各控件输入的值“捕获”到与之关联的变量中
	Triangle t1(m_a,m_b,m_c);  //定义三角形对象
	m_area=t1.area();    //求面积
	UpdateData(FALSE);   //用m_area的值更新界面上相应的控件的值并实现显示
}  另外,在triangleDlg.cpp的開始处要写入“#include"MyTriangle.h"”,这个你应该懂,也要懂。 (图12)
(图12) (图13)
(图13) (图14)
(图14)2、理解代码及MFC
请将项目中由向导自己主动生成的各个文件浏览一下,你将会发现我们确实已经学过了当中所包括的机制。class CtriangleDlg : public CDialog
{
// 构造
public:
	CtriangleDlg(CWnd* pParent = NULL);	// 标准构造函数
// 对话框数据
	enum { IDD = IDD_TRIANGLE_DIALOG };
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
// 实现
protected:
	HICON m_hIcon;
	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedButton1();
	double m_a;
	double m_b;
	double m_c;
	double m_area;
};  从代码中能够看到,这个应用程序中定义的CtriangleDlg类继承了CDialog类,当中的构造函数、虚函数等机制都有体现。还有,设置的m_a等几个变量,都是这个类的数据成员,而OnBnClickedButton1()为这个类的成员函数。
  (图15)
五、结语
看一个业界大牛的界面:
  
   对一个产品而言,虽然UI(用户界面)很重要,影响着产品的使用体验,甚至决定着产品的成败(想想苹果的产品)。对学习技术的同学,界面、窗体并不是应用的核心,核心仍在技术基础,须要优先解决编程能力的问题。在此基础上,再掌握开发平台。
   这是应用开发人员要走的路。
【相关博文】
C++“窗体”程序设计启蒙 (之中的一个)
C++“窗体”程序设计启蒙(之二),布布扣,bubuko.com
原文地址:http://www.cnblogs.com/blfshiye/p/3764265.html