C及Windows可视化程序设计 刘振安著.pptx
上传人:骑着****猪猪 上传时间:2024-09-13 格式:PPTX 页数:142 大小:3.5MB 金币:20 举报 版权申诉
预览加载中,请您耐心等待几秒...

C及Windows可视化程序设计 刘振安著.pptx

C及Windows可视化程序设计刘振安著.pptx

预览

免费试读已结束,剩余 132 页请下载文档后查看

20 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

会计学本章将介绍如何使用MFC类库编程,并通过一个简单的例子说明MFC的消息处理机制。然后模拟文档/视结构编制一个程序,通过它引入使用向导和文档/视结构的概念,为学习下一章的文档/视结构打下基础。最后给出一个基于对话框风格的实例。在使用MFC类库编程之前,先来看一个使用全局对象的例子。【例12.1】使用全局对象启动程序运行。//example.h文件#include<iostream>usingnamespacestd;classCMyApp{intx,y,z;public:CMyApp(inta=0,intb=0,intc=0):x(a),y(b),z(c){cout<<″Begin...″<<endl;}voidSetNum(inta,intb,intc){x=a;y=b;z=c;}intAdd(){returnx+y+z;}};//example.cpp文件#include″example.h″CMyApptheApp;//全局对象voidmain(){cout<<″Inmain...″<<endl;theApp.SetNum(2,4,6);cout<<theApp.Add();cout<<endl<<″Goout...″<<endl;}程序运行输出如下:Begin...Inmain...12Goout...程序是先执行“CMyApptheApp;”创建并初始化惟一全局对象theApp,输出信息“Begin...”,然后进入主程序。VisualC++6.0的程序设计方法也是如此,即先建立并初始化惟一的全局对象theApp。图12.1左边的框中给出这个程序的类图及全局变量图,右边是程序的.cpp文件。图12.1Object的类图及全局变量C++类库运用面向对象技术,大大简化了程序的设计工作。Microsoft公司提供的基础类库MFC(MicrosoftFoundationClasses)就是一个常被称为ApplicationFramework的大类库,其中包含用来开发Windows下C++应用程序的一组类,封装了大部分的WindowsAPI,大大加速Windows下C/C++程序员的软件设计。习惯上分别用Win16和Win32区别16位和32位Windows程序,WindowsAPI则是泛指两者。由前面的讨论可知,驾驭数以千计的API函数并非易事。MFC则把这些浩繁的API函数逻辑地组织起来,使它们具有面向对象的抽象性、封装性、继承性和多态性等特点。怎样学习MFC类库,各人意见不一。很多人认为:“学习MFC,最重要的一点是要学会抽象地把握问题,不求甚解”。这可能对减轻学习难度、提高兴趣是有帮助的,不过也有一些问题,即很多人成了代码拼凑机、只见树木不见森林。其实,在学习开始就了解Windows程序的基本运行原理,并了解MFC是怎样与之结合的,能大大加快理解,让人更易于接受MFC,这样学习似慢实快。相反,很多书从头到尾地教读者如何如何做,最后仍旧不知所以。学习MFC要理解MFC的应用程序框架,熟记其类层次结构,并不需要刻意去记忆众多的类及它们的成员函数。【例12.2】使用MFC类库编制输出“HelloMFC”的程序。文档/视的结构比较复杂,先不让向导(AppWizard)生成代码,仍然用VisualC++6.0集成开发环境生成一个空的Win32应用程序项目SMFC1。建立SMFC1.cpp文件如下:#include<afxwin.h>//使用MFC类库需要包含的头文件classCMyWin:publicCFrameWnd{public:CMyWin(){}protected:afx_msgvoidOnPaint();DECLARE_MESSAGE_MAP()//声明宏};//使用消息宏BEGIN_MESSAGE_MAP(CMyWin,CFrameWnd)ON_WM_PAINT()END_MESSAGE_MAP()voidCMyWin∷OnPaint(){CStringstr=″Hello,MFC!″;//设置输出窗口的//字符串内容CRectrect(240,100,340,200);CPaintDCdc(this);dc.DrawText(str,&rect,DT_CENTER);}classCMyApp:publicCWinApp{public:BOOLInitInstance();};BOOLCMyApp∷InitInstance()//改写CWinApp的//InitInstance函数{CMyWin*