WEB开发网
开发学院软件开发VC MFC 教程 阅读

MFC 教程

 2007-03-18 21:29:34 来源:WEB开发网   
核心提示:我曾写一本关于MFC的书,分析了MFC的结构和设计(《MFC深入浅出》),MFC 教程,华中理工大学出版,书的内容建立在对MSDN和MFC SOURCE CODE的大量分析上,在Unxi操作系统中实现,WinSock也是一个基于Socket模型的API,该书对于希望学习MFC的人来说,是较有价值的

我曾写一本关于MFC的书,分析了MFC的结构和设计(《MFC深入浅出》),华中理工大学出版。书的内容建立在对MSDN和MFC SOURCE CODE的大量分析上,该书对于希望学习MFC的人来说,是较有价值的。可惜出版社好象只在几个城市针对学生作销售,虽然学生反应不错,但是外界知道不多。

教程列表:

MFC教程(1)--MFC概述

MFC是一个编程框架

MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C++提供了相应的工具来完成这...

http://tech.ddvip.com/2007-03/117415707121625.htmlMFC教程(2)-- MFC和Win32

MFC Object和Windows Object的关系

MFC中最重要的封装是对Win32 API的封装,因此,理解Windows Object和MFC Object (C++对象,一个C++类的实例)之间的关系是理解MFC的关键之一。所谓Windows Object(Windows对象)是Win32下用句柄表示的Windows操作系统对象;所谓MFC Object (MFC对象)是C++对象,是一个C++类的实例,这里(本书范围内)MFC Object是有特定含义的,指封装Windows Object的C++ Obje...

http://tech.ddvip.com/2007-03/117415714821626.htmlMFC教程(3)-- CObject类

CObject是大多数MFC类的根类或基类。CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。MFC从CObject派生出许多类,具备其中的一个或者多个特性。程序员也可以从CObject类派生出自己的类,利用CObject类的这些特性。

本章将讨论MFC如何设计CObject类的这些特性。首先,考察CObject类的定义,分析其结构和方法(成员变量和成员函数)对CObjec...

http://tech.ddvip.com/2007-03/117415721521627.htmlMFC教程(4)-- 消息映射的实现(1)

消息映射的实现

Windows消息概述

Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。

消息的分类

队列消息和非队列消息

从消息的发送途径上看,消息分两种:队列消息和非队列消息。队列消息送到系统消息队列,然后到线程消息队列;非队列消息直接送给目的窗口过程。

...

http://tech.ddvip.com/2007-03/117415733421628.htmlMFC教程(4)-- 消息映射的实现(2)

但是在当前例子中,当前对象的类CTview没有覆盖该函数,所以CWnd的WindowProc被调用。

这个函数把下一步的工作交给OnWndMsg函数来处理。如果OnWndMsg没有处理,则交给DefWindowProc来处理。

OnWndMsg和DefWindowProc都是CWnd类的虚拟函数。

OnWndMsg的原型如下:

BOOL CWnd::OnWndMsg( UINT message,

WPARAM wParam, LPARAM lParam,RESULT*pResult );

...

http://tech.ddvip.com/2007-03/117415736721629.htmlMFC教程(5)-- MFC对象的创建(1)MFC对象的创建

前面几章介绍了MFC的核心概念和思想,即介绍了MFC对Windows对象的封装方法和特点;MFC对象的动态创建、序列化;MFC消息映射机制。

现在,考查MFC的应用程序结构体系,即以文档-视为核心的编程模式。学习本章,应该弄清楚以下问题:

MFC中诸多MFC对象的关系:应用程序对象,文档对象,边框窗口对象,文档边框窗口对象,视对象,文档模板对象等。

MFC对象的创建和...

http://tech.ddvip.com/2007-03/117415776621630.htmlMFC教程(5)-- MFC对象的创建(2)

从这些图中可以看到何时、何处调用了什么消息处理函数和虚拟函数,这些函数用来作了什么事情。必要的话,程序员可以在派生类覆盖它们。

在创建工作完成之后,进行初始化,使用文档对象的数据来更新视和显示窗口。

至此,本节描述了MFC的SDI程序从分析命令行到创建或打开文件的处理过程,文档对象已经动态创建。总结如下:

命令行分析→应用程序的FileNew→文档模板的OpenDocu...

http://tech.ddvip.com/2007-03/117415781021631.htmlMFC教程(6)-- 应用程序的退出

一个Windows应用程序启动之后,一般是进入消息循环,等待或者处理用户的输入,直到用户关闭应用程序窗口,退出应用程序为止。

例如,用户按主窗口的关闭按钮,或者选择执行系统菜单“关闭”,或者从“文件”菜单选择执行“退出”,都会导致主窗口被关闭。

当用户从“文件”菜单选择执行“退出”时,将发送MFC标准命令消息ID_APP_EXI...

http://tech.ddvip.com/2007-03/117415785621632.htmlMFC教程(7)-- MFC的DLL

一般的,在介绍Windows编程的书中讲述DLL的有关知识较多,而介绍MFC的书则比较少地提到。即使使用MFC来编写动态链接库,对于初步接触DLL的程序员来说,了解DLL的背景知识是必要的。另外,MFC提供了新的手段来帮助编写DLL程序。所以,本节先简洁的介绍有关概念。

DLL的背景知识

静态链接和动态链接

当前链接的目标代码(.obj)如果引用了一个函数却没有定义它,链接程序可能通过两...

http://tech.ddvip.com/2007-03/117415789521633.htmlMFC教程(8)-- MFC的进程和线程

Win32的进程和线程概念

进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源(如进程创建的文件、管道、同步对象等)组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。

线程是操作系统分时调度分配CPU时间的基本实体。一个线程可以执行程序的任意部分的代码,即使这部分代码被另一个线程并发地执行;一个进程的所有线程共享它的...

http://tech.ddvip.com/2007-03/117415794021634.htmlMFC教程(9)-- MFC的进程和线程(1)

MFC定义了多种状态信息,这里要介绍的是模块状态、进程状态、线程状态。这些状态可以组合在一起,例如MFC句柄映射就是模块和线程局部有效的,属于模块-线程状态的一部分。

模块状态

这里模块的含义是:一个可执行的程序或者一个使用MFC DLL的DLL,比如一个OLE控件就是一个模块。

一个应用程序的每一个模块都有一个状态,模块状态包括这样一些信息:用来加载资源的 Windows实例句柄、指...

http://tech.ddvip.com/2007-03/117415799821635.htmlMFC教程(9)-- MFC的进程和线程(2)

下面以一个动态链接到MFC DLL的单模块应用程序为例,说明这些对象的创建过程。

当第一次访问状态信息时,比如使用 AfxGetModuleState得到模块状态,导致系列创建过程的开始,如图9-7所示。

首先分析语句pState=_afxThreadState。如果_afxThreadData、线程状态和模块状态还没有创建,该语句可以导致...

http://tech.ddvip.com/2007-03/117415802321636.htmlMFC教程(10)-- 内存分配方式和调试机制

M内存分配

内存分配函数

MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。

Win32的堆分配函数

每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。

HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分...

http://tech.ddvip.com/2007-03/117415851521637.htmlMFC教程(11)-- MFC下的文件类

文件操作的方法

使用Visual C++编程,有如下方法进行文件操作:

(1)使用标准C运行库函数,包括fopen、fclose、fseek等。

(2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。不过,在Win32下,这些函数主要是为了和Win16向后兼容。

(3)使用Win32下的文件和目录操作函数,如CreateFile,CopyFile,DeleteFile,FindNextFile,等等。

Wi...

http://tech.ddvip.com/2007-03/117415865921638.htmlMFC教程(12)-- 对话框和对话框类CDialog(1)

对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。

模式和无模式对话框

对话框分两种类型,模式对话框和无模式对话框。

模式对话框

一个模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和 DS_MODALFRAME风格。即使没有指定WS_VISIBLE风格,模式对话框也会被显示。...

http://tech.ddvip.com/2007-03/117415886921639.htmlMFC教程(12)-- 对话框和对话框类CDialog(2)

RunModalLoop是一个实现自己的消息循环的示例,消息循环的条件是模式化状态没有结束。实现线程自己的消息循环见8.5.6节。当用户按下按钮“取消”、“确定”时,将导致RunModalLoop退出消息循环,结束对话框模式状态,并调用::EndDialog关闭窗口。有关关闭对话框的处理如下:void CDialog::EndDialog(int nResult)
{
ASSERT(::IsWindow(m_hWnd));
if (m_nFlags & (WF_M...

http://tech.ddvip.com/2007-03/117415921421640.htmlMFC教程(13)-- MFC工具条和状态栏(1)

Windows控制窗口

Windows (Windows95或者以上版本) 提供了系列通用控制窗口,其中包括工具条(ToolBar)、状态栏(StatusBar)、工具条提示窗口(ToolTip)。

Windows在一个DLL加载时注册个控制窗口的“窗口类”。例如,工具条的“窗口类”是“ToolbarWindow32”,状态栏的“窗口类”是“msctls_statusbar32”,工具条提示窗口的“...

http://tech.ddvip.com/2007-03/117415946421641.htmlMFC教程(13)-- MFC工具条和状态栏(2)

消息WM_POPMESSAGESTRING用来重新设置状态栏。

这两个消息对应的消息处理函数分别是OnSetMessageString和OnPopMessageString,OnSetMessageString和OnPopMessageString分别实现如下:

OnSetMessageString
LRESULT CFrameWnd::OnSetMessageString(WPARAM wParam, LPARAM lParam)
{
//最近一次被显示的消息字符串IDS(一个消息对应的字符串)
UINT nIDLast = m_nIDLastMessage; http://tech.ddvip.com/2007-03/117415973621642.htmlMFC教程(14)-- SOCKET类的设计和实现

WinSock基本知识

这里不打算系统地介绍socket或者WinSock的知识。首先介绍WinSock API函数,讲解阻塞/非阻塞的概念;然后介绍socket的使用。

WinSock API

Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley接口,在Unxi操作系统中实现。WinSock也是一个基于Socket模型的API,在Microsoft Windows操作系统类中使用。它在Berkeley接口...

http://tech.ddvip.com/2007-03/117415993421643.html

Tags:MFC 教程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接