C++课件:MFC编程基础_第1页
C++课件:MFC编程基础_第2页
C++课件:MFC编程基础_第3页
C++课件:MFC编程基础_第4页
C++课件:MFC编程基础_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

1、MFC概述2、MFC层次结构及其子类功能3、MFC应用程序架构4、基于框架的MFC应用程序分析7/31/20231MFC编程基础MFC:Microsoft

Foundation

Class首先:它是一个类库、功能是控制整个计算机系统。其次:它是一个面向对象的应用程序框架,程序员可以使用这一框架创建

Windows应用程序。同时:MFC的组织是以C++类层次形式组织起来的,几个高层类提供一般功能,

而低层类实现更具体的功能,每一个低层类都是从高层类派生而来,因此继承了高层类的功能。7/31/2023216.1

MFC概述所以:MFC是一种类的层次结构,它提供了一个应用程序开发框架,此框架称为文档/视图架构。它对应的是Windows系统目录下的一系列mfc*.dll文件。7/31/20233MFC就是利用面向对象的思想,将数据类型与Windows大部分API函数封装起来的一个浩瀚的类库,利用MFC编写程序本质上就是选择该类库中合适的类,并调用其下相应成员函数来完成某个功能。7/31/20234MFC的实质Win32数据类型7/31/202351、Windows消息函数

2、文件处理函数3、网络函数4、菜单函数5、文本与字体函数6、硬件与系统函数7、控件和消息函数8、位图、图标和光栅运算函数9、绘图函数10、打印函数11、设备场景函数12、进程和线程函数7/31/20236Win32API接口函数程序员如何去学习MFC7/31/202371、C++语言基础2、Windows操作系统基础3、面向对象程序观念的基础抽象、封装、继承、多态站在OS角度上看程序7/31/202381、执行程序的过程是OS完成任务的过程2、程序执行一次是创建了一个进程,申请了一个独立的内存空间。3、程序和OS是通过事件驱动、消息机制通信的4、一个程序必有一个WinMain函数5、一个程序必有一个窗口,进行输入输出6、一个程序的启动过程,就是一个WinMain函数的加载过程7、一个程序至少由两部分组成:

WinMain、WndProc面向对象观点看待Windows编程7/31/202391、具有应用程序对象,功能包括:注册窗口(填充窗口结构,注册窗口),初始化程序实例(创建、显示、刷新)。2、具有窗口对象,功能相当于WndPro函数3、保留WinMain函数,实现消息循环。4、最好实现数据与显示分离。■用面向对象观点重组API1、API是WIN32编程的重要基础2、关于应用程序对象3、关于框架窗口对象4、关于视图对象5、关于文档对象(数据与显示分离)6、关于其它对象的API*重点是类和对象的概念关系*7/31/20231016.2

MFC层次结构7/31/202311MFC是一个包含了超过200个不同类的很庞大的类库。利用他们,开发者可以完成许多标准的Windows编程任务,并且可以在应用程序中加入许多复杂的特性。在设计思想上,MFC将面向对象的方法与事件驱动结合得很好,因此要理解庞大的MFC类库中的常用类的功能,要利用面向对象的思想进行理解和分析。7/31/202312MFC中类的层次结构MFC的优点1、MFC对于类、类的继承、封装、多态性、类间关系和相互作用等

应用程序特性都有具体体现,可

以使开发者高效、轻松地建立

Windows应用程序,而不受设备限制并且由事件进行驱动。7/31/2023132、MFC具有良好的通用性和可移植性,它定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的工作就是通过VC所提供的各种工具来完成这个工作。7/31/2023141、根类CObject7/31/202315CObject类是MFC的抽象基类(不能派生对象),是MFC中多数类和用户自定义类的根类,它为程序员提供了许多公共操作和基本服务。主要包括:对象的动态建立与删除、序列化(即串行化)的支持、对象诊断输出、运行时信息管理以及集合类的兼容等。作用是,使得MFC以及基于MFC的应用程序更加稳固和易于调试。根类CObject的组成7/31/2023162、消息映射类CCmdTarget7/31/202317该类是CObject的子类,是MFC类库中所有具有消息映射属性的基类,消息映射规定了当对象接到命令消息时,应调用哪一个函数对该消息进行处理。由CCmdTarget派生出的主框架类包括

CView、CWinApp、CDocument、CWnd和CframeWnd都可处理命令消息。程序员若需要一个新类来处理消息时,可以从CCmdTarget派生出一个新类。一般程序员很少从CCmdTarget类中直接派生出新类,而是从其子类CView、CWinApp来派生消息映射类CCmdTarget组成7/31/202318每一个使用MFC的应用程序只能包含一个从CWinApp派生的应用程序对象,当VC的其它全局对象被构造时,这个对象也同时被构造,当

Windows调用WinMain()函数时,产生的对象已经有效了。从CWinApp实例化的应用程序对象是一个全局变量,在程序运行中该对象可以与其它对象相互协调。7/31/2023193、窗口应用程序类CWinApp访问CWinApp对象以及全局函数。

AfxGetApp:获得一指向CWinApp对象的指针AfxGetResourceHabdle:获得一应用程序资源的句柄。AfxGetAppName:获得指向一个包含应用程序名的字符串的指针。CWinApp的公共数据成员

m_pszAppName:指定应用程序的名称。

m_nCmdShow:指定窗口的显示方式。

m_pMainWnd:包含一个指针,它指向一个应用程序的主窗口。7/31/2023204、应用程序类CWinApp组成(3)CWinApp的公共成员函数

LoadCursor:调取光标资源。

LoadStandardCursor:调取Windows预定义光标,在windows.h中指定IDC常量。LoadIcon:调取一个图标资源。

LoadStandardIcon:调取Windows预定义的图标,在windows.h中指定IDI常量。OpenDocumentFile:框架调用此函数打开一个指定的文档。7/31/202321(4)CWinApp的可超载的函数

InitApplication:重载以执行任何应用程序层次上的初始化。InitInstance:重载以执行Windows对象实例的初始化,诸如建立用户窗口对象等。Run:运行缺省的消息循环,重载该函数以自定义消息循环。OnIdle:重载以执行任何应用程序指定的空闲时间处理。PreTranslateMessage:在窗口消息被

TranslateMessage()和DispatchMessage()处理之前过滤它们。7/31/202322该类为线程的基类,CWinApp是从CWinThread派生

而来。该对象描述程序线程的执行,主线程的执行通常由一个CWinApp的派生对象提供。CWinThread的公共数据成员

m_hThread:当前线程的句柄。

m_nThreadID:当前线程的ID值。

m_pMainWnd:指向程序主窗口指针。CWinThread的公共成员函数GetMainWnd:获取一个指向此线程的的主窗口指针。GetThreadPriority:获取当前线程的优先权。ResumeThread:减小一个线程的挂起计数。7/31/2023235、应用程序线程类CWinThread➢6、文档/视图类文档对象由文档模板对象创建,管理应用程序的数据。视图对象表示一个窗口的客户区,它显示文档数据并允许用户与之交互。CDocTemplate类:文档模板的基类。它负责协调文档、视窗和框架窗口的创建。CMultiDocTemplate类:多文档界面(MDI)的文档模板。CSingleDocTemplate类:单文档界面

(SDI)的文档模板。CDocument:应用程序所用文档的基类。

CView:显示文档数据的应用程序专用视图的基类。7/31/202324CFrameWnd类CFrameWndCMDIFrameWndCMDIChildWnd8.视图类CViewCScrollViewCFormViewCRecordViewCEditView7/31/2023259.对话框类7/31/202326由于对话框是一个特殊窗口,所以该类是从CWnd类中派生出来的。对话框子层次结构包括通用对话框类CDialog以及支持字体选择、打印、替换文本等公共对话框子类。CDialogCCommonDialogCFileDialogCColorDialogCFontDialogCPrintDialog➢10.控件类控件类包含若干个可视控件,使用这些类可建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条和编辑框等,这些可视控件为Windows应用程序提供了各种输入和显示界面。(1)CStatic(2)CButton(3)CEdit(4)CScrollBar(5)CSliderCtrl(6)CListBox

(7)CComboBoxl(8)CBitmapButton

(9)CAnimateCtrl(10)

CTreeCtrl(11)CListCtrl7/31/2023271、是一种编程模型。2、是被应用程序开发者定制的应用骨架。3、是一个可复用的设计组件。应用程序架构包括应用程序的总体组织和全局控制、通讯协议、同步、数据存取,给设计元素分配特定功能,设计元素的组织,规模和性能,以及在各个设计方案间进行选择。7/31/20232816.3

MFC应用程序架构应用程序架构本质上是一种软件高层次复用,它可以在具有相似需求的多个系统中得到复用,这比代码级的复用具有更大的意义应用程序架构屏蔽了系统底层技术,需要用户具有更为扎实的基本功,无形之中限制了用户的思维。7/31/202329MFC应用程序架构优缺点16.4基于MFC框架的应用程序实例7/31/202330基于MFC框架的应用程序实例7/31/2023317/31/2023327/31/2023337/31/2023347/31/2023357/31/2023367/31/2023377/31/2023387/31/2023397/31/2023407/31/202341class

CAboutDlg

:

public

CDialog{public:CAboutDlg();//

Dialog

Data//{{AFX_DATA(CAboutDlg)enum

{

IDD

=

IDD_ABOUTBOX

};//}}AFX_DATA//

ClassWizard

generated

virtual

function

overrides//{{AFX_VIRTUAL(CAboutDlg)protected:•7/31/202342//

DDX/DDVvirtual

void

DoDataExchange(CDataExchange*

pDX);support//}}AFX_VIRTUAL//

Implementationprotected://{{AFX_MSG(CAboutDlg)//

No

message

handlers//}}AFX_MSGDECLARE_MESSAGE_MAP()};五个类的具体实现//

DO

NOT

EDIT

what

you

see

in

these

blocks

of

generated

code

!//}}AFX_MSGDECLARE_MESSAGE_MAP()7/31/202343class

CHelloWApp

:

public

CWinApp{public:CHelloWApp();//

Overrides//

ClassWizard

generated

virtual

function

overrides//{{AFX_VIRTUAL(CHelloWApp)public:virtual

BOOL

InitInstance();//}}AFX_VIRTUAL//

Implementation//{{AFX_MSG(CHelloWApp)afx_msg

void

OnAppAbout();//

NOTE

-

the

ClassWizard

will

add

and

remove

member

functions

here.•••};class

CHelloWDoc

:

public

CDocument{protected:

//

create

from

serialization

onlyCHelloWDoc();DECLARE_DYNCREATE(CHelloWDoc)//

Attributespublic://

Operationspublic://

Overrides//

ClassWizard

generated

virtual

function

overrides//{{AFX_VIRTUAL(CHelloWDoc)public:virtual

BOOL

OnNewDocument();virtual

void

Serialize(CArchive&

ar);//}}AFX_VIRTUAL7/31/202344//

Implementationpublic:virtual

~CHelloWDoc();#ifdef

_DEBUGvirtual

void

AssertValid()

const;virtual

void

Dump(CDumpContext&

dc)

const;#endifprotected://

Generated

message

map

functionsprotected://{{AFX_MSG(CHelloWDoc)

//

NOTE

-

the

ClassWizard

will

add

and

remove

memberfunctions

here.7/31/202345•//

DO

NOT

EDIT

what

you

see

in

these

blocks

of

generated//}}AFX_MSGDECLARE_MESSAGE_MAP()code

!••};class

CHelloWView

:

publicCView{protected:

//

create

from

serializationonlyCHelloWView();DECLARE_DYNCREATE(CHelloWView)//

Attributespublic:CHelloWDoc*

GetDocument();//

Operationspublic://

Overrides//

ClassWizard

generated

virtual

function

overrides//{{AFX_VIRTUAL(CHelloWView)public:virtual

void

OnDraw(CDC*

pDC);

//

overridden

to

draw

this

viewvirtual

BOOL

PreCreateWindow(CREATESTRUCT&

cs);protected:virtual

BOOL

OnPreparePrinting(CPrintInfo*

pInfo);virtual

void

OnBeginPrinting(CDC*

pDC,

CPrintInfo*

pInfo);virtual

void

OnEndPrinting(CDC*

pDC,

CPrintInfo*

pInfo);//}}AFX_VIRTUAL7/31/202346//

Implementationpublic:virtual~CHelloWView();#ifdef

_DEBUGvirtual

void

AssertValid()

const;virtual

void

Dump(CDumpContext&

dc)

const;#endifprotected://

Generated

message

map

functionsprotected://{{AFX_MSG(CHelloWView)

//

NOTE

-

the

ClassWizard

will

add

and

removemember

functions

here.7/31/202347•//generated

code

!//}}AFX_MSGDO

NOT

EDIT

what

you

see

in

these

blocks

of••};DECLARE_MESSAGE_MAP()•7/31/202348class

CMainFrame

:

public

CFrameWnd{protected:

//

create

from

serialization

onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)//

Attributespublic://

Operationspublic://

Overrides//

ClassWizard

generated

virtual

function

overrides//{{AFX_VIRTUAL(CMainFrame)

virtual

BOOL

PreCreateWindow(CREATESTRUCT&cs);//}}AFX_VIRTUAL//

Implementationpublic:virtual

~CMainFrame();#ifdef

_DEBUGvirtual

void

AssertValid()

const;virtual

void

Dump(CDumpContext&

dc)

const;#endifprotected:

//

control

bar

embedded

membersCStatusBar

m_wndStatusBar;CToolBar

m_wndToolBar;//

Generated

message

map

functionsprotected://{{AFX_MSG(CMainFrame)afx_msg

int

OnCreate(LPCREATESTRUCT

lpCreateStruct);

//

NOTE

-

the

ClassWizard

will

add

and

remove

member

functionshere.//

DO

NOT

EDIT

what

you

see

in

these

blocks

of

generated

code!//}}AFX_MSGDECLARE_MESSAGE_MAP()};7/31/2023491、类与对象关系?

2、Winmain函数?3、对象如何创建

温馨提示

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

评论

0/150

提交评论