Visual C++程序设计课件_第1页
Visual C++程序设计课件_第2页
Visual C++程序设计课件_第3页
Visual C++程序设计课件_第4页
Visual C++程序设计课件_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualC++程序设计

VisualC++程序设计Windows的编程模式基于MFC的VisualC++编程模式Windows的编程模式Windows操作系统的特点Windows应用程序设计的基本概念Windows应用程序的结构框架Windows应用程序的工作模式Windows应用程序的开发流程Windows操作系统的特点Windows是Microsoft公司开发的一种基于窗口的操作系统,主要用于个人计算机系统其中最重要的是以下:1.友好的用户界面2.高性能的抢占式多任务操作3.动态链接库4.有效的应用程序设计接口(API)Win32APIWindows应用程序Windows应用程序…Windows应用程序Win32子系统系统服务硬件层用户态核心态Win32API主要由Win32子系统的三个动态链接库实现:

·USER32.DLL:负责处理用户接口,包括键盘和鼠标输入、窗口和菜单管理等

·GDI32.DLL:负责在图形设备(包括显示器和打印机)上执行绘图操作

·KERNEL32.DLL:操作系统核心功能服务,包括进程和线程控制、内存管理和文件访问等Windows应用程序设计的基本概念Windows应用程序是面向对象的。它的这些面向对象的特征通过其特有程序设计模式表现出来。这种特有的程序设计模式主要包含如下三方面的内容:

·窗口为核心的用户界面;

·以事件驱动为动力的程序运行机制;

·程序代码与用户界面分别处理。窗口窗口是由应用程序创建的、系统显示器上的一个用于接收用户输入和显示输出的矩形区域进一步说,窗口涉及如下一些概念:

·应用程序只能通过窗口访问系统显示器,并且与其他应用程序共享显示器

·同一时间只有一个窗口是活动的;

·Windows允许应用程序创建多个窗口,但每个应用程序至少要创建一个窗口——主窗口作为用户与应用程序的主要接口;其他的窗口用于完成相关任务,如对话框、消息框等;

·一旦创建了一个窗口,Windows就提供该窗口所对应的各种交互信息,并负责为应用程序管理屏幕,控制窗口的位置和显示,确保不会有两个应用程序的窗口冲突。

·一个应用程序的窗口一般由标题栏、菜单栏、工具栏、边框、客户区、滚动条等部件组成面向对象Windows程序设计是面向对象的,凡是与程序有关的实体,都称为对象。为了对这众多的对象进行管理,Windows在内部为每个程序的对象要建立一个索引表。索引表的索引,就称为“句柄”(Handle)。句柄的值是一个数字公共Windows对象及其句柄对

柄对

柄快捷键表

HACCEL位图

HBITMAP画刷

HBRUSH光标

HCURSOR设备描述表

HDC文件

HFILE字体

HFONT图标

HICON菜单

HMENU调色板

HPALETTE画笔

HPEN区域

HRGN窗口

HWND事件驱动一般地说,程序执行的进程是由某种机制驱动进行的。目前可以把程序执行进程的驱动分为两种类型:1)过程驱动2)事件驱动过程驱动采用过程驱动的程序一般由一系列的函数或过程组成。这些函数或过程具有预定的初始化、中间处理和输出序列,以此控制程序的基本流程。由于这些序列是预定的,因此它具有面向系统性和主动性,在程序的执行过程中,用户的干预空间较小事件驱动采用事件驱动的程序不给程序预先规定一个执行顺序,程序一旦启动,就处于等待状态,等待某种事件的发生;只要有用户输入事件发生,它就立刻接收事件并做出响应;处理完毕又立刻返回等待下一个事件的发生。这种循环等待方式,具有面向用户性和被动性,可以给用户提供较大的干预空间,让用户以各种合理的和可能的顺序来安排程序的流程,特别适合交互性强的程序消息与消息循环Windows是一个多任务的操作系统环境。在这个平台上,多个程序所以能有秩序地交织运行,就在于它采用了“消息传送”(MessagePassing)机制消息处理是Windows应用程序的核心。所有的Windows应用程序都是消息驱动的。在Windows环境下,所有的外部输入都被系统先拦截,转换成消息之后,再传送给程序中的目标。目标系统再根据消息的具体内容进行相应的处理Windows消息机制应用程序1消息循环WinMain()窗口函数1窗口函数m…应用程序队列1应用程序n消息循环WinMain()窗口函数1窗口函数m…应用程序队列n……系统消息队列Windows事件发生检索消息发送消息检索消息发送消息Windows程序和消息的基本流程初始化

开始执行

当前消息是“退出”消息从消息队列取得一个消息

终止执行

是否当前程序要处理的消息处理消息默认处理

是消息分类在Windows中,操作系统的各部分之间以及应用程序之间,通过消息进行通信据统计大约有近千种消息,但从分布来说,可以分为系统消息和应用程序消息两种类型。其中系统消息可分为如下三类

a)标准Windows消息

b)控件消息

c)命令消息消息的数据结构消息定义成如下的一个结构体:

a)目标窗口句柄

b)消息标识

c)参数wParam和lParam

Windows应用程序的结构框架Windows应用程序的基本结构具有固定性: 入口点函数WinMain

窗口函数构成了Windows应用程序的基本框架WinMain函数WinMain函数是Windows应用程序的入口点WinMain函数用于完成一些特别的功能,其中最主要的是创建该应用程序的主窗口,为此,多数程序需要执行如下4部分操作:

1)注册窗口类

2)创建窗口

3)显示窗口

4)建立消息循环WinMain的例子#include<windows.h>LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明intWINAPIWinMain

( HINSTANCE hInstance, //应用程序当前实例句柄

HINSTANCE hPrevInst, //应用程序其他实例句柄

LPSTR lpszCmdLine, //指向程序命令行参数的指针

int

nCmdShow

//应用程序执行时窗口显示方式的标识) { HWND hwnd; MSG Msg; //窗口类标题

WNDCLASS wndclass; char lpszClassName[]=“示例窗口”;//窗口类名char lpszTitle[]=“窗口示例程序”; //窗口类标题//-------------------注册窗口类----------------------//wndclass.style=0; //窗口类型为缺省类型wndclass.lpfnWndProc=WndProc; //窗口处理函数为WndProcwndclass.cbClsExtra=0; //窗口类无扩展wndclass.cbWndExtra=0; //窗口实例无扩展wndclass.hInstance=hInstance; //当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//使用缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//窗口采用箭头光标wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景白色wndclass.lpszMenuName=NULL; //窗口中无菜单wndclass.lpszClassName=lpszClassName; //窗口类名为“窗口示例”if(!RegisterClass(&wndclass)){ //若注册失败则发出警告声音MessageBeep(0);returnFALSE;}//----------------------创建窗口-----------------------//

hwnd=CreateWindow(

lpszClassName, //窗口类名

lpszTitle, //窗口实例标题名

WS_OVERLAPPEDWINDOW, //窗口的风格

CW_USEDEFAULT,CW_USEDEFAULT, //窗口左上角坐标为缺省值

CW_USEDEFAULT,CW_USEDEFAULT, //窗口的高和宽为缺省值

NULL, //此窗口无父窗口

NULL, //此窗口无主菜单

hIstance, //应用程序的当前例句

NULL); //不使用该值

//-----------------------显示窗口----------------------//

ShowWindow(hwnd,nCmdShow); //显示窗口

UpdateWindow(hwnd); //绘制用户区

//----------------------建立消息循环---------------------//while(GetMessage(&Msg,NULL,0,0)){ //消息循环

TranslateMessage(&Msg);

DispatchMessage(&Msg);}returnMsg.wParam; //程序终止时将信息返回系统}窗口函数每个窗口必须有一个窗口函数(或称窗口过程)。窗口函数主要执行两方面的操作:

1)从Windows接收消息:这些消息或是由WinMain中通过消息循环发送的输入消息,或是直接来自Windows系统的窗口管理消息 2)检查每一条消息,进行相应的处理:窗口函数由一系列的case语句组成,用于根据消息的类型执行相应的程序段窗口函数示例LRESULTCALLBACKWndProc(HWNDhwnd,UINT

message,WPARAM

wParam,LPARAM

lparam){switch(message){ caseWM_DESTROY: PostQuitMessage(0);//调用该函数发出WM_QUIT消息

default://缺省消息处理函数

returnDefWindowProc(hwnd,message,wParam,lparam);} return(0);}Windows应用程序的工作模式应用程序1消息循环WinMain()窗口函数1窗口函数m…应用程序队列1…系统消息队列Windows用户键入xxWindows应用程序的过程1用户利用中断将键入字符x送入系统队列2系统将字符x送入应用程序队列3应用程序检索应用程序队列4消息循环接收字符x5Windows从应用程序得到译成ANSI字符消息的WM_CHAR6Windows将WM_CHAR与原键盘消息发给窗口函数7窗口函数发出请求8Windows将字符x输出到对应的窗口Windows应用程序的开发流程.LIB.BMP对话框编辑器资源编译器文本编辑器.H图象编辑器字体编辑器.ICO.CUR.FON.CPP.DLG.RCC++编译器.OBJ.RES.DEF链接器.EXE源代码编辑用户界面资源编辑编辑编译链接注释.H 头文件.CPP C++源代码文件.OBJ 目标文件.DLG 对话框文件(二进制).BMP 位图文件(二进制).ICO 图标文件(二进制).CUR 光标文件(二进制).FON 字体文件(二进制).RC 资源描述文件.RES 资源文件(二进制).LIB 库文件(二进制).DEF 模块定义文件.EXE 可执行文件(二进制)基于MFC的VisualC++编程模式集成开发环境DeveloperStudio用MFCAppWizard生成一个简单程序的过程VisualC++应用程序结构MFC应用程序的控制MFC类库层次结构

基于MFC的VisualC++编程模式VisualC++是在Windows操作系统支持下的一种C++程序开发平台。它的优势是它提供了一个集成有编辑、编译、连接、调试等程序开发工具,更重要的是提供了全方位的自动编程服务工具——编程向导Wizard的集成开发环境——DeveloperStudio它是基于MFC的。类库是一个可以在应用程序中使用的相互关联的C++类的集合。MFC不仅包含了C++的基类,还包含了WinMain函数以及其他一些支持标准菜单、常见消息处理、窗口滚动等功能的元素和API函数,功能涉及到整个Windows操作系统MFC类库不仅是预定义的类的集合,而且是一个应用框架。它定义了应用程序的结构,这个结构把应用程序与Windows的接口部分和应用程序的其他部分结合成一个整体,有许多通用代码是由系统自动生成的,不须程序员自己编写,只要把非通用代码填入指定的位置即可集成开发环境DeveloperStudioDeveloperStudio的特点DeveloperStudio的特点程序的开发过程,是由应用程序向导引导完成的,便于学习掌握每个应用程序都有大致相同的结构,这些相同的部分用同样的代码描述提供了一套功能强大的基础类库,即微软基础类库MFC引入了文档-视图结构在MFC中用指针来标识对象提供强有力的资源管理功能以项目作为应用程序开发的基本单位AppWizard可以建立三种类型的应用程序结构MDI:多文档界面,允许同时打开多个文档,多用于像Word,Excel那样的规模比较大的应用程序SDI:单文档界面,一次只允许打开一个文档DialogbasedDialogbased:基于对话的应用程序,不支持文档/视图结构,仅显示一个简单的对话框,主要用于编写小程序

多文档与单文档界面应用程序的外观DeveloperStudio界面状态态项目窗口信息窗口用户操作窗口文件页、资源页、类页间切换DeveloperStudio包含了标题、菜单、工具条、状态条等部件。此外,还配置了项目工作窗口(项目工作区)、用户操作窗口、信息窗口等3个窗口:①项目工作窗口(Projectworkspace):包含正在开发的项目的信息,能够分页显示当前项目中的类(Class)、文件(Files)、资源(Resource)等构造情况②用户操作窗口:对在项目工作窗口中选中的内容进行源程序或资源的编辑等操作③信息窗口:进行编译及链接操作时,给出编译、链接情况的信息(如,构成项目的每个程序名,错误信息等)用MFCAppWizard生成一个简单程序的过程使用MFCAppWizard[exe]制作程序框架在OnDraw(CDC*pDC)函数中增加代码制作程序框架的操作步骤准备:确定项目名和项目目录创建程序框架制作可执行文件运行程序确定项目名和存储目录

选择projects项输入项目名

输入目录名

选择平台

选择应用向导创建框架程序的步骤

选择文档界面

选择资源语言界面样本

进入下一步创建框架程序的步骤在菜单条中选择Projects在Projects菜单窗口中选择MFC向导在Location

对话框中输入存放项目的工作目录名在ProjectName对话框中输入项目名,项目名就是最终的应用程序名从Platforms列表框中选择可用的目标平台单击OK按钮创建程序框架完成MFC向导进行的操作选择数据库支持选择复合文档支持附加功能设置选择是否在由向导及类向导生成的源代码中附加注释和链接库的类型确定由AppWizard生成的类名和文件名创建框架的步骤之4、5创建框架的步骤之6框架程序的组成信息制作可执行文件在项目工作窗口的下端单击“File..”(FilesView)按钮点击OutTextFiles,便展示出从“OutTextFiles”生长出的一个帮助文件ReadMe.txt和三个文件夹:

·SourceFiles(源程序文件夹)

·HeaderFiles(头文件文件夹)

·ResourceFiles(资源文件文件夹)在DeveloperStudio窗口中单击菜单项的Build打开Build菜单,再单击BuildOutText.exe

(或者直接按F7键),DeveloperStudio便开始编译和链接,同时在输出窗口中显示出编译和链接的信息制作可执行文件

制作可执行文件(包含编译和链接)执行文件程序)

展示OutTextFiles文件夹源程序文件夹头文件文件夹资源文件文件夹帮助文件单击“File..按钮编译和链接信息运行程序运行程序的方法有3种:

·在DeveloperStudio窗口中打开Build菜单,单击ExecuteOutText.exe

·在DeveloperStudio集成环境中按Ctrl+F5键

·不在DeveloperStudio集成环境中时,可在资源管理器中进入OutText文件夹,再进入Debug子文件夹,双击图标表示的文件框架程序的执行结果主窗口标题栏菜单条工具条执行New操作打开的子窗口执行Open操作打开的对话框OnDraw(CDC*pDC)函数中增加代码在项目工作区依次执行:单击FilesView

按钮→双击OutTextfiles

选择项→双击SourceFiles→双击OutTextView.cpp,在客户编辑窗口中就会显示出OutTextView.cpp的源文件代码插入上面所示的一行代码后,将项目OutText

重新编译、链接(单击Build打开Build菜单,再单击BuildSteleton.exe

或者直接按F7键)就生成了可执行文件OutText.EXE

文本输出程序的结果VisualC++应用程序结构VisualC++应用程序的逻辑构件——对象VisualC++应用程序的存储结构——文件应用程序的逻辑构件——对象面向对象的程序由对象组成。程序设计的任务是根据给定的问题对涉及到的对象进行分类,接下来的任务就是定义各对象类,并书写实现这些类的代码以及实现对象间消息传递的代码VisualC++主要的组成部分

文档对象:用于存放应用程序的数据和文件视图对象:管理视图窗口,显示用户数据,接收用户对数据的鼠标、键盘操作,并传送给文档类对象。文档类对象必须通过视图类对象才能实现与用户的交互应用程序对象:控制应用程序的所有对象,包括文档、视图和边框窗口,并完成应用程序的初始化工作和程序退出的清除工作主窗口对象:主要用于管理主程序的窗口,显示标题栏、工具栏、状态栏,处理窗口操作消息应用程序类构成一个对话框应用程序由一个应用程序类和一个对话框类构成一个SDI应用程序由应用程序类、框架类、文档类和视图类构成一个MDI应用程序由应用程序类、主框架类、子框架类、文档类和视图类构成名为Xxxx的MDI应用程序为例应用程序类(由CWinApp类派生)文档类(由CDocument类派生)视图类(由CView类派生)主框架类(由CMDIFrameWnd类派生)子框架类(由CMDIChildWnd类派生)应用程序类缺省的名字:

·类名:CXxxxApp ·类的头文件名:Xxxx.h ·类的实现文件名:Xxxx.cpp功能:

·控制应用程序的所有对象

·应用程序的初始化

·创建主窗口

·处理消息循环,从Windows操作系统中获取信息分发给程序窗口

·退出应用程序

·关闭应用文档类

缺省的名字: 类名:CXxxxDoc

类的头文件(定义该类)名:XxxxDoc.h

类的实现文件名:XxxxDoc.cpp功能:存放程序数据并实现文件保存和装载视图类缺省的名字: 类名:CXxxxView

类的头文件名:XxxxView.h

类的实现文件名:XxxxView.cpp功能:指定用户与文档间的交互形式主框架类缺省的名字:

·类名:CMainFrame ·类的头文件名:MainFrm.h ·类的实现文件名:MainFrm.cpp功能:管理应用程序窗口,显示标题栏、菜单栏、工具栏、状态栏、控制菜单和控制按钮,包容子框架窗口子框架类缺省的名字:

·类名:CChildFrame ·类的头文件名:ChildFrm.h ·类的实现文件名:ChildFrm.cpp功能:管理应用程序窗口,无自己的菜单栏、工具栏、状态栏,但可与主框架类共享应用程序的存储结构——文件从物理上来看,VisualC++程序是由一些文件组成的4个主要组成部分各自由不同的文件描述。一般说来,每一个主要的类都由两类文件支持:一类的后缀为.h,主要用于该类的定义(派生关系以及组成成员)等一类的后缀为.cpp,主要用于描述该类的实现(写成员函数的代码)等AppWizard生成一系列文件自述文件ReadMe.txt

项目文件(PRJNAME.dsp

、PRJNAME.clw

)应用程序源文件和头文件资源文件预定义的文件:STDAFX.h和STDAFX.cpp

上下文敏感的帮助文件按可选项增加的AppWizard文件应用程序源文件和头文件PRJNAME.h:应用程序的应用程序类的头文件PRJNAME.cpp:应用程序的应用程序类的实现文件,包含应用类的具体实现代码和消息映射MainFrame.h:应用程序框架窗口类的头文件MainFrame.cpp:应用程序框架窗口类的实现文件ChildFrm.h:应用程序子框架窗口类的头文件ChildFrm.cpp:应用程序子框架窗口类的实现文件PRJNADoc.h:应用程序文档类的头文件PRJNADoc.cpp:应用程序文档类的实现文件,实现文档的初始化、保存、装入、调试诊断PRJNAView.h:应用程序视图类的头文件PRJNAView.cpp:应用程序视图的实现文件,实现文档数据的显示、打印资源文件PRJNAME.rc:项目的资源文件Resource.h:资源头文件,包含了标准MFC的资源——标准的菜单、加速键和字符串表res\

PRJNAME.ico:应用程序的图标文件res\

PRJNDoc.ico:MDI应用程序的子窗口图标文件res\TOOLBAR.hmp:位图文件,指定了支持工具条时,用于创建级联图象res\PRJNAME.rc2:AppStudio尚未建立和编辑的资源的资源文件MFC应用程序的控制文档模板应用程序的控制文档模板MFC用文档模板(DocumentTemplate)类的对象来存储程序文档、视图和框架窗口有关的信息,提供MFC用来将文档、视图和框架结合在一起的框架结构,以协调框架窗口、文档对象和视图对象之间的关系MFC类库提供有两种文档模板:

·CSingleDocTemplate:用于SDI应用程序,每次只能创建和管理一个文档。

·CMultiDocTemplate:用于MDI应用程序,每次可以创建和管理多个文档。应用程序的控制应用程序启动//创建全局对象CxxxApptheApp;CXxxApp(){}InitInstance(){创建并注册程序窗口、文档模板、文档、视图等}CWinApp(){//建立全局指针,用于调用//WinApp成员函数}Run(){消息循环}ExitIstance(){终止应用程序的一副本}初始化应用程序应用程序运行应用程序结束///入口函数AfxWinMain(){

调用调用调用}应用程序处理内容Xxx.cppWindows系统CXxxApp类基类CWinApp类说明初始化:AfxWinMain()调用CXxxApp类对象的成员函数InitInstance(),初始化应用程序,构造文档模板,产生最初的文档、视图和主框架窗口等运行应用程序:AfxWinMain()调用CXxxApp类对象的成员函数Run(),处理消息循环结束应用程序:AfxWinMain()调用CXxxApp类对象的成员函数ExitInstance()一个简单的MFC程序的执行流程

intAFXAPIAfxWinMain

(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,int

nCmdShow){ASSERT(hPrevInstance==NULL);int

nReturnCode=-1;CWinThread*pThread=AfxGetThread(); CWinApp*pApp=AfxGetApp();//AFXinternalinitializationif(!AfxWinInit(hInstance,hPrevInstance,lpCmdLine,nCmdShow))

goto

InitFailure;//Appglobalinitializations(rare)if(pApp!=NULL&&!pApp->InitApplication())

goto

InitFailure;//Performspecificinitializationsif(!pThread->InitInstance()) //注1{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论