C++ MFC/BCG编程(一):MFC简介及MFC类库概述


MFC概述

MFC(Microsoft Foundation Classes Library,微软基础类库) 是微软公司推出的一套用于Windows平台的C++类库,它基于Win32 API进行封装,提供了面向对象的编程接口,旨在简化Windows应用程序的开发过程。通过MFC,开发者可以不必直接与底层的Win32 API打交道,而是利用MFC提供的类和对象来快速构建出具有标准用户界面的应用程序。

VC++全称Visual C++,是由微软提供的C++开发工具,是用C++语言编写程序的工具平台。
VC++不仅是一个编译器更是一个集成开发环境,包括编辑器、调试器和编译器等,一般它包含在Visual Studio中。

  • 封装特性: MFC类库构成了MFC框架。这些C++类库封装了WIN32应用程序编程接口(Win32 API)以及Windows应用程序各种特性。

    • Win32 API的封装
    • 对应用程序概念的封装
    • 对COM/OLE特性的封装
    • 对ODBC功能的封装
  • 继承特性: MFC抽象出了众多类的共同特性,并设计出一些基类作为实现其他类的基础。

    • CObject类是MFC的根类,绝大多数类是其派生的,CObject实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持等等。所有从CObject派生的类都可以具备CObject所拥有的特性。
    • CCmdTarget类派生自CObject类,它封装了一些属性和方法,提供了消息处理的架构。任何可以处理消息的类都是从CCmdTarget类派生。
  • 虚函数和动态约束: 作为C++类库,MFC自然支持虚函数和动态约束。但作为一个编程框架必须要解决的是效率问题:如果MFC仅仅通过虚函数来支持动态约束必然会产生大量的虚函数表这样编程框架过于臃肿而且消耗更多的内存。但是MFC建立了消息映射机制这样降低了内存的使用却大大提高了效率。

    消息映射是一个将消息和成员函数相互关联的表,当应用程序的框架窗口接收到一个消息时,MFC将搜索该窗口的消息映射,如果存在一个处理消息的处理程序,那么就调用该处理程序。它通过宏来实现消息到成员函数的映射,而且这些函数不必是虚拟的成员函数,这样不需要为消息映射函数生成一个很大的虚拟函数表(V表),节省内存。

相关概念:
OLE技术
ATL技术

BCGControlBarPro库概述

BCGControlBarPro 是一个功能强大的MFC扩展库,专为开发者提供高度定制化的用户界面和丰富的交互功能。该库集合了大量经过精心设计的界面元素,从基本的按钮和列表框到高级的图表和网格控件,支持各种UI增强功能。提供了一个全面的解决方案来设计和实现现代用户界面。它通过提供 MFC 的扩展功能,来增强基于Windows的应用程序的外观和用户体验。

BCGControlBarPro 库作为一套为MFC(Microsoft Foundation Classes)应用程序提供丰富界面组件的解决方案,为开发者提供了高度可定制和扩展的控件,能够帮助用户轻松实现应用程序的视觉效果和用户体验升级。该库的控件可以分为两类:标准控件扩展控件

  • 标准控件 :这些控件与Windows标准控件外观类似,但在功能和性能上进行了提升。它们包括按钮、编辑框、列表框等,通常能够满足大部分的用户界面设计需求。
  • 扩展控件 :BCGControlBarPro 还包括许多高级控件,如树视图、网格视图、菜单、工具栏等,这些控件在外观和功能性上都远远超出了标准控件的范围。

使用 BCGControlBarPro 库进行界面设计,可以遵循以下几个步骤:

  1. 集成库到项目中 :首先需要将 BCGControlBarPro 库集成到现有的MFC项目中,这涉及添加库文件、设置编译器和链接器选项等。
  2. 利用控件属性 :在对话框编辑器或资源编辑器中,拖放 BCGControlBarPro 提供的控件,并通过属性页对控件进行设置。
  3. 编写代码进行自定义 :除了界面编辑器中的视觉设计外,还需要编写相应的事件处理代码来响应用户的操作。

MFC组成

MFC由两大部分组成

(一)是通常所说的C++类库,是MFC类库的主体部分,这些类构成了MFC应用程序框架。
(二)是MFC预定义宏、全局变量和全局函数,是MFC类库的辅助部分,它们都是用MFC进行Windows应用程序开发的不可缺少的组成部分。

  • 双冒号开头函数为Win32 API函数(MFC也支持对底层Win32 API的直接调用),如:
    ::GetModuleHandle(NULL);
    
  • MFC库的全局函数以Afx开头函数,如:
    AfxWinInit(hModule, NULL, ::GetCommandLine());
    
  • MFC库的全局变量以afx为前缀。
  • MFC宏主要功能:消息映射、运行时对象类型服务、诊断服务、异常处理。

常用头文件
(1)afx.h 将其他MFC头文件包含在内
(2)afxwin.h 包含了各种MFC窗口类,包含了afx.h和windows.h
(3)afxext.h 包含了扩展窗口类的支持,如:工具栏和状态栏
(4)afxcmn.h 包含了各种控件的成员方法

MFC对比Windows API

MFC Object和Windows Object的对应关系:

描述Windows Handle 句柄MFC Object
窗口HWNDCWnd
设备上下文HDCCDC
菜单HMENUCMenu
画笔HPENCPen
画刷HBRUSHCBrush
字体HFONTCFont
位图HBITMAPCBitmap
调色板HPALETTECPalette
区域HRGNCRgn
套接字SOCKETCSocket

常用Afx全局函数

MFC程序也经常调用API函数

  • AfxAbort :无条件地终止一应用程序;通常在不可恢复错误发生时调用
  • AfxBeginThread :创建新的线程并开始执行它
  • AfxEndThread :终止当前执行的线程
  • AfxMessageBox :显示Windows消息框
  • AfxGetApp :返回指向应用程序对象的指针
  • AfxGetAppName :返回应用程序的名称
  • AfxGetMainWnd :返回指向应用程序主窗口的指针
  • AfxGetInstanceHandle :返回标识当前应用程序实例的句柄
  • AfxRegisterWndClass :为MFC应用程序注册自定义的WNDCLASS类

MFC类的分层结构

MSDN 手册

在这里插入图片描述

Classes declared in <afx.h>

/*============================================================================*/
// Classes declared in <afx.h>

struct CRuntimeClass;          // object type information

class CObject;                        // the root of all objects classes

	class CException;                 // the root of all exceptions
		class CArchiveException;      // archive exception
		class CFileException;         // file exception
		class CSimpleException;
			class CMemoryException;       // out-of-memory exception
			class CNotSupportedException; // feature not supported exception
			class CInvalidArgException;	  // one of the parameters to the function is invalid

	class CFile;                      // raw binary file
		class CStdioFile;             // buffered stdio text/binary file
		class CMemFile;               // memory based file

// Non CObject classes
struct CFileStatus;                   // file status information
struct CMemoryState;                  // diagnostic memory support

class CArchive;                       // object persistence tool
class CDumpContext;                   // object diagnostic dumping

/*============================================================================*/

Classes declared in <afxwin.h>

/*============================================================================*/
// Classes declared in <afxwin.h>

//CObject
	//CException
		//CSimpleException
			class CResourceException;// Win resource failure exception
			class CUserException;    // Message Box alert and stop operation

	class CGdiObject;            // CDC drawing tool
		class CPen;              // a pen / HPEN wrapper
		class CBrush;            // a brush / HBRUSH wrapper
		class CFont;             // a font / HFONT wrapper
		class CBitmap;           // a bitmap / HBITMAP wrapper
		class CPalette;          // a palette / HPALLETE wrapper
		class CRgn;              // a region / HRGN wrapper

	class CDC;                   // a Display Context / HDC wrapper
		class CClientDC;         // CDC for client of window
		class CWindowDC;         // CDC for entire window
		class CPaintDC;          // embeddable BeginPaint struct helper

	class CImageList;            // an image list / HIMAGELIST wrapper

	class CMenu;                 // a menu / HMENU wrapper

	class CCmdTarget;            // a target for user commands
		class CWnd;                 // a window / HWND wrapper
			class CDialog;          // a dialog

			// standard windows controls
			class CStatic;          // Static control
			class CButton;          // Button control
			class CListBox;         // ListBox control
				class CCheckListBox;// special listbox with checks
			class CComboBox;        // ComboBox control
			class CEdit;            // Edit control
			class CScrollBar;       // ScrollBar control

			class CMFCPreviewCtrlImpl; // helper window for DLL implementation of Rich Preview

			// frame windows
			class CFrameWnd;        // standard SDI frame
				class CMDIFrameWnd; // standard MDI frame
				class CMDIChildWnd; // standard MDI child
				class CMiniFrameWnd;// half-height caption frame wnd

			// views on a document
			class CView;            // a view on a document
				class CScrollView;  // a scrolling view

		class CWinThread;           // thread base class
			class CWinApp;          // application base class

		class CDocTemplate;         // template for document creation
			class CSingleDocTemplate;// SDI support
			class CMultiDocTemplate; // MDI support

		class CDocument;            // main document abstraction
		class CMFCFilterChunkValueImpl; // search/organize/preview/thumbnail support - filter chunk value implementation


// Helper classes
class CCmdUI;           // Menu/button enabling
class CDataExchange;    // Data exchange and validation context
class CCommandLineInfo; // CommandLine parsing helper
class CDocManager;      // CDocTemplate manager object

struct COleControlSiteOrWnd; // ActiveX dialog control helper


class CControlCreationInfo; //Used in CWnd::CreateControl overloads.

class CVariantBoolConverter;
class CMFCDynamicLayout;

/*============================================================================*/

基类CObject

CObject类是大多数MFC类的最终基类,它们都继承了CObject类的三个主要特征:

  • 在运行时识别对象所属的类
  • 支持串行化,把对象存入文件中及从文件中读取对象
  • 在运行时打印诊断信息

每个从CObject类派生的类还有一个相关的CRuntimeClass结构,可以在运行时获取对象的信息。通过对RUNTIME_CLASS宏的调用可获得与指定类对应的CRuntimeClass结构。

用户也可以直接从CObject类派生自已的类以获得这些特性。为此,应遵循以下步骤:
(1) 在类声明中包含宏DECLARE_SERIAL
(2) 为类提供一个默认的构造函数,这是一个无参数的构造函数
(3) 在用来定义类成员函数的C++源文件中,包含宏IMPLEMENT_SERIAL
(4) 重载成员函数Serialize()

命令发送类CCmdTarget

命令发送类CCmdTarget封装了用户通过选择菜单或工具栏按钮向应用程序发送命令的界面。封装了MFC消息映射机制,支持命令和消息的自动发送,保证命令和消息正确发送到目的地。
命令发送类CCmdTargetCObject类派生,是应用程序结构类和窗口类的基类。但CCmdTarget类在应用程序中很少直接使用。

CCmdUI类是一个与CCmdTarget类相关的有特殊用途的支持类,它封装了用于更新用户接口对象(如菜单项和工具栏按钮)的可编程界面,用在CCmdTarget类派生类的ON_UPDATE_COMMAND_UI控制函数中,该类没有任何基类。

应用程序结构类

应用程序结构类(Application Architecture Class)提供了应用程序的几乎所有通用功能,它们构成了windows应用程序的主要框架。我们通过这些类的派生类,添加新成员函数或重载现有成员函数以实现需要的功能,从而构造应用程序框架。

应用程序线程支持类CWinThread/CWinApp

MFC支持多线程。所有的应用程序至少有一个线程,这个线程由CWinApp类的对象使用,被称为主线程。每个应用程序有且只有一个CWinApp类或其派生类的全局对象,它在程序运行中协调基他对象的动作。

CWinThread类是所有线程类的基类,封装了操作应用程序的多线程功能。CWinThread类是多线程应用程序的线程类的直接基类。

CWinAppCWinThread类的派生类,封装了基于MFC的windows应用程序的初始化、运行及终止等功能。CWinApp的全局对象控制着整个应用程序的流程。

CWinApp类取代了WinMain()主函数在SDK应用程序中的地位。传统SDK应用程序WinMain()函数完成的工作。现在由类CWinApp的InitApplication(),InitInstance()和Run()三个成员函数承担。

文档类CDocument

文档类封装了应用程序的数据管理,文档类对象由由文档模板创建。

CDocument 类是文档类的基类,用户应用程序文档类可从CDocument 类直接派生。CDocument 类支持一些标准操作,如:新建文档,打开文档、和存储文档等。

文档模板类CDocTemplate

文档模板类将文档、视图及边框窗口相互联系起来,在创建新文档或视图时协调文档、视图及边框窗口的创建。

  • CDocTemplate 类是一个抽象基类,它为文档模板封装了基本功能,用户不能直接使用该类。
  • CMultiDocTemplate 为多文档接口(MDI)提供了模板。
  • CSingleDocTemplate 为单文档接口(SDI)提供模板。应用程序结构类还包括其他一些主要与OLE有关的类。

窗口类

窗口类包括边框窗口类、视图类、对话框类、控件类、控件栏类和属性页类,这些类的共同之处是都封装了一个窗口句柄HWND,都是从CWnd派生的。

窗口基类CWnd

CWnd类作为所有窗口类的公共基类,包含了大量的成员函数,为窗口类提供了基本操作,这些操作包括:

  • 创建和初始化窗口;
  • 操纵、查询窗口状态;
  • 管理窗口的尽寸、位置、标题、光标、菜单、滚动;
  • 对窗口的坐标进行换算;
  • 管理对话框中的控件;
  • 管理windows消息;
  • 操纵剪切板和OLE控制。

CWnd类的消息响应机制将WndProc函数隐藏起来,Windows消息通过 消息响应表 自动相应的响应函数,CWnd类提供了默认的消息响应函数,在CWnd的派生类重载默认的响应函数来指定当消息发送给窗口时执行我们指定的操作。

边框窗口类CFrameWnd

当应用程序在Windows环境下运行时,用户通过边框窗口与Windows进行交互,边框窗口通常包含并管理其他窗口,如视图、工具栏或状态栏等。

它取代了SDK应用程序中窗口函数WndProc()的地位。CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。

CFrameWnd类是边框窗口类的基类,单文档接口(SDI)的边框窗口类 直接从CFrameWnd类派生。创建边框窗口可先生成CFameWnd对象,然后直接调用成员函数CreateLoadFrame,也可以利用文档模板来创建边框窗口。

CMDIFrameWnd类和CMDIChileFrameWnd类都是从CFrameWnd类派生的,分别用于支持多文档接口(MDI)的主边框窗口和子窗口。一个MDI主边框窗口包含并一个客户边框窗口(MDIClient window),客户边框窗口负责MDI子窗口的激活、最大化、最小化、恢复和删除,我们可以通过公有数据成员m_hWndMDIClient获取客户边框窗口的句柄。当有子窗口激活时,自动将菜单转换为子窗口的菜单。

CSplitterWnd类提供了分割窗口的功能,即一个窗口包含很多个面板,这些面板一般都是视图对象,也可以是其他CWnd类或其派生对象。CSplitterWnd对象一般作为边框窗口CFrameWndCMDIChildWnd对象的一个数据成员来使用.

CSplitterWnd类不是从CFrameWnd类派生的,而是直接从CWnd类派生。

视图类CView

视图类管理着边框窗口的客户区,为用户与Windows之间提供可视接口,用于显示文档的数据,并接收来自用户键盘或鼠标的输入,提供用户与应用程序的交互接口,还允许用户对数据预览和打印。视图一般通过文档模板与文档相关联。

CView类是视图类的基类。通常的应用程序直接从CView类派生自已的视图类。其他的具有特殊功能的视图类是由CView类派生的如下视图提供。

CScrollView类支持可滚动的视图,管理视图的尺寸和映射模式,自动响应滚动条和键盘的滚动消息。

CCtrlView类及其派生类CEditViewCListViewCTreeViewCRichEditView,将文档/视图模型应用到windows95和windows nt 3.51以后版本所支持的通用控件上,使得在视图中使用控件CEditCListCRichEdit的功能。

CFormView类是CScrollView类的派生类,该类支持基于对话框资源的视图。CFormView类还派生了分别用于ODBC数据库、DAO数据库、数据库记录和WebBrowser控件的CRecordView类、CDaoRecordView类、COleDBRecordView类和CHtmlView类。

VS2010之MFC入门到精通教程的pdf,共306页 ,10大章节,55小节。完整有图版 第部分:VS2010/MFC 开发环境 VS2010/MFC 编程入门之前言 VS2010/MFC 编程入门之(VS2010 与MSDN 安装过程图解) 第二部分:VS2010/MFC 应用程序框架 VS2010/MFC 编程入门之二(利用MFC 向导生成单文档应用程序框架) VS2010/MFC 编程入门之三(VS2010 应用程序工程中文件的组成结构) VS2010/MFC 编程入门之四(MFC 应用程序框架分析) VS2010/MFC 编程入门之五(MFC 消息映射机制概述) 第三部分:对话框 VS2010/MFC 编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC 编程入门之七(对话框:为对话框添加控件) VS2010/MFC 编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC 编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC 编程入门之十(对话框:设置对话框控件的Tab 顺序) VS2010/MFC 编程入门之十(对话框:模态对话框及其弹出过程) VS2010/MFC 编程入门之十二(对话框:非模态对话框的创建及显示) VS2010/MFC 编程入门之十三(对话框:属性页对话框及相关类的介绍) VS2010/MFC 编程入门之十四(对话框:向导对话框的创建及显示) VS2010/MFC 编程入门之十五(对话框:般属性页对话框的创建及显示) VS2010/MFC 编程入门之十六(对话框:消息对话框) VS2010/MFC 编程入门之十七(对话框:文件对话框) VS2010/MFC 编程入门之十八(对话框:字体对话框) VS2010/MFC 编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC 编程入门之二十(常用控件:静态文本框) VS2010/MFC 编程入门之二十(常用控件:编辑框Edit Control) VS2010/MFC 编程入门之二十二(常用控件:按钮控件Button、Radio Button 和Check Box) VS2010/MFC 编程入门之二十三(常用控件:按钮控件的编程实例) VS2010/MFC 编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC 编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC 编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC 编程入门之二十七(常用控件:图片控件Picture Control) VS2010/MFC 编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC 编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC 编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC 编程入门之三十(常用控件:树形控件Tree Control 下) VS2010/MFC 编程入门之三十二(常用控件:标签控件Tab Control 上) VS2010/MFC 编程入门之三十三(常用控件:标签控件Tab Control 下) 第五部分:菜单、工具栏与状态栏 VS2010/MFC 编程入门之三十四(菜单:VS2010 菜单资源详解) VS2010/MFC 编程入门之三十五(菜单:菜单及CMenu 类的使用) VS2010/MFC 编程入门之三十六(工具栏:工具栏资源及CToolBar 类) VS2010/MFC 编程入门之三十七(工具栏:工具栏的创建、停靠与使用) VS2010/MFC 编程入门之三十八(状态栏的使用详解) 第六部分:文档、视图和框架 VS2010/MFC 编程入门之三十九(文档、视图和框架:概述) VS2010/MFC 编程入门之四十(文档、视图和框架:各对象之间的关系) VS2010/MFC 编程入门之四十(文档、视图和框架:分割窗口) 第七部分:MFC 常用类 VS2010/MFC 编程入门之四十二(MFC 常用类:CString 类) VS2010/MFC 编程入门之四十三(MFC 常用类:CTime 类和CTimeSpan 类) VS2010/MFC 编程入门之四十四(MFC 常用类:定时器Timer) VS2010/MFC 编程入门之四十五(MFC 常用类:CFile 文件操作类) VS2010/MFC 编程入门之四十六(MFC 常用类:MFC 异常处理) 第八部分:字体和文本输出 VS2010/MFC 编程入门之四十七(字体和文本输出:CFont 字体类) VS2010/MFC 编程入门之四十八(字体和文本输出:文本输出) 第九部分:图形图像 VS2010/MFC 编程入门之四十九(图形图像:CDC 类及其屏幕绘图函数) VS2010/MFC 编程入门之五十(图形图像:GDI 对象之画笔CPen) VS2010/MFC 编程入门之五十(图形图像:GDI 对象之画刷CBrush) 第十部分:Ribbon 界面开发 VS2010/MFC 编程入门之五十二(Ribbon 界面开发:创建Ribbon 样式的应用程序框架) VS2010/MFC 编程入门之五十三(Ribbon 界面开发:为Ribbon Bar 添加控件) VS2010/MFC 编程入门之五十四(Ribbon 界面开发:使用更多控件并为控件添加消息处理函数)
目 录 本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写个应用程序要走的步骤编写。全书共分四部分进行介绍,第部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理方面的实例,第四部分讲述打包实例。全书基本上面向实例进行阐述,讲解透彻、易于掌握。本书既可作为初学者和大专院校师生的自学参考书,也可作为计算机软件开发人员的技术参考书。 译者序 前言 第部分 基础知识 第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种类型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口和MFC环境 4 1.3 怎样应用MFC创建个窗口 5 1.4 怎样使用MFC销毁个窗口 9 1.4.1 捆绑到个已有的窗口 9 1.4.2 窗口类 10 1.4.3 窗口进程 10 1.5 怎样使用MFC创建个窗口类 11 1.5.1 使用AfxRegisterWndClass () 函数注册个窗口类 11 1.5.2 使用AfxRegisterClass ()函数 创建个窗口类 12 1.6 怎样销毁MFC窗口类 14 1.7 厂商安装的窗口类 14 1.8 其他类型窗口 15 1.9 桌面窗口 16 1.10 小结 16 第2章 类 18 2.1 基类 18 2.1.1 CObject 18 2.1.2 CCmdTarget 19 2.1.3 CWnd 19 2.2 应用程序、框架、文档和视图类 19 2.2.1 CWinApp(O/C/W) 20 2.2.2 CView (O/C/W) 21 2.3 其他用户界面类 22 2.3.1 通用控件类 23 2.3.2 菜单类 23 2.3.3 对话框类 24 2.3.4 控制条类 24 2.3.5 属性类 25 2.4 绘图类 25 2.4.1 设备环境类 25 2.4.2 图形对象类 25 2.5 文件类 26 2.6 数据库类 26 2.6.1 ODBC类 26 2.6.2 DAO类 27 2.7 数据集类 27 2.8 其他数据类 27 2.9 通信类 28 2.10 其他类 29 2.11 小结 31 第3章 消息处理 32 3.1 发送或寄送个消息 32 3.1.1 发送个消息 32 3.1.2 寄送个消息 32 3.1.3 发送个消息与寄送个消息 的比较 32 3.2 怎样使用MFC发送个消息 33 3.3 怎样用MFC寄送个消息 33 3.4 三种类型的消息 34 3.4.1 窗口消息 34 3.4.2 命令消息 34 3.4.3 控件通知 34 3.5 MFC怎样接收个寄送的消息 36 3.6 MFC怎样处理个接收到的消息 36 3.7 处理用户界面的对象 44 3.8 创建自定义窗口消息 45 3.8.1 静态分配的窗口消息 45 3.8.2 动态分配的窗口消息 46 3.9 重定向消息 47 3.9.1 子分类和超分类 47 3.9.2 用MFC子分类窗口 48 3.9.3 重载OnCmdMsg ( ) 49 3.9.4 使用SetWindowsHookEx ( ) 49 3.9.5 使用SetCapture ( ) 49 3.9.6 专有的消息泵 50 3.10 小结 50 第4章 绘图 51 4.1 设备环境 51 4.2 在MFC环境中创建个设备环境 52 4.2.1 屏幕 52 4.2.2 打印机 53 4.2.3 内存 54 4.2.4 信息 54 4.3 绘图例程 55 4.3.1 画点 55 4.3.2 画线 55 4.3.3 画形状 55 4.3.4 形状填充和翻转 55 4.3.5 滚动 56 4.3.6 绘制文本 56 4.3.7 绘制位图和图标 56 4.4 绘图属性 56 4.4.1 设备环境属性 57 4.4.2 画线属性 58 4.4.3 形状填充属性 58 4.4.4 文本绘制属性 58 4.4.5 映像模式 59 4.4.6 调色板属性 62 4.4.7 混合属性 62 4.4.8 剪裁属性 63 4.4.9 位图绘制属性 64 4.5 元文件和路径 65 4.5.1 元文件 65 4.5.2 路径 66 4.6 颜色和调色板 66 4.6.1 抖动色 67 4.6.2 未经抖动色 67 4.6.3 系统调色板 67 4.6.4 使用系统调色板 68 4.6.5 动画色 71 4.7 控制什么时候在哪里绘图 71 4.7.1 处理WM_PAINT 71 4.7.2 只绘制被无效化的区域 72 4.7.3 处理WM_DRAWITEM 72 4.7.4 在其他时间绘图 73 4.8 小结 74 第二部分 用户界面实例 第5章 应用程序与环境 76 5.1 例1 规划MFC应用程序 76 5.2 例2 用AppWizard创建MFC 应用程序 79 5.3 例3 用ClassWizard创建个类 83 5.4 例4 初始化应用程序屏幕 84 5.5 例5 保存应用程序屏幕 86 5.6 例6 处理命令行选项 88 5.7 例7 动态改变应用程序图标 91 5.8 例8 提示用户优先选项 93 5.9 例9 保存和恢复用户优先选项 97 5.10 例10 终止应用程序 100 5.11 例11 创建个启动窗口 101 第6章 菜单 107 6.1 例12 使用菜单编辑器 107 6.2 例13 添加个菜单命令处理函数 109 6.3 例14 根据当前可视文档动态改 变菜单 110 6.4 例15 启用和禁用菜单命令 111 6.5 例16 复选标记菜单命令 112 6.6 例17 单选标记菜单命令 113 6.7 例18 动态修改菜单 114 6.8 例19 动态修改系统菜单 116 6.9 例20 触发个菜单命令 117 6.10 例21 创建弹出式菜单 117 第7章 工具栏和状态栏 120 7.1 例22 使用工具栏编辑器 120 7.2 例23 启用和禁用工具栏按钮 122 7.3 例24 为工具栏按钮添加字 123 7.4 例25 非标准工具栏大小 128 7.5 例26 保持工具栏按钮按下 129 7.6 例27 保持工具栏按钮组中 个按钮按下 130 7.7 例28 为工具栏添加非按钮控件 131 7.8 例29 修改应用程序的状态栏 136 7.9 例30 更新状态栏窗格 138 7.10 例31 为状态栏添加其他控件 139 第8章 视图 145 8.1 例32 滚动视图 145 8.2 例33 改变鼠标光标形状 147 8.3 例34 沙漏光标 148 8.4 例35 窗体视图 149 8.5 例36 列表视图 152 8.6 例37 动态分割个视图 163 第9章 对话框和对话条 166 9.1 例38 使用对话框编辑器 166 9.2 例39 创建个对话框类 168 9.3 例40 模式对话框 170 9.4 例41 无模式对话框 171 9.5 例42 在无模式对话框的控件间 切换焦点 172 9.6 例43 对话框中的动画 173 9.7 例44 消息框 174 9.8 例45 对话条 176 第10章 控件窗口 182 10.1 例46 在任意位置创建个控 件窗口 182 10.2 例47 用子分类定制个通用 控件窗口 183 10.3 例48 用超分类定制个通用 控件窗口 188 10.4 例49 在按钮上放置位图 190 10.5 例50 动态填充个组合框 192 10.6 例51 排序个列表控件 194 10.7 例52 分隔线控件 196 第11章 绘图 198 11.1 例53 绘制图形 198 11.2 例54 绘制文本 201 11.3 例55 从任意位置装入个图 标并绘制 203 11.4 例56 从任意位置装入个位 图和绘制个位图 204 11.5 例57 从文件中创建个位图 206 11.6 例58 创建个自绘位图 211 第三部分 内部处理实例 第12章 消息 215 12.1 例59 添加消息处理函数或重 载MFC类 216 12.2 例60 添加命令范围消息处理函数 219 12.3 例61 重定向命令消息 221 12.4 例62 创建自己的窗口消息 222 第13章 文件、串行化和数据库 225 13.1 例63 访问二进制文件 225 13.2 例64 访问标准I/O文件 227 13.3 例65 访问内存文件 228 13.4 例66 在数据类中实现串行化 229 13.5 例67 串行化SDI或MDI文档 235 13.6 例68 按要求串行化 240 13.7 例69 透明地更新串行化的文档 242 13.8 例70 串行化多态类 246 13.9 例71 串行化数据集 248 13.10 例72 访问ODBC数据库 252 13.11 例73 访问DAO数据库 257 第14章 杂类 263 14.1 例74 剪切、拷贝和粘贴文本 数据 263 14.2 例75 剪切、拷贝、粘贴多信 息文本数据 268 14.3 例76 剪切、拷贝和粘贴二进制 数据 273 14.4 例77 数组函数 280 14.5 例78 列表函数 281 14.6 例79 映像函数 283 14.7 例80 系统键盘输入 285 14.8 例81 时间 288 第四部分 打包实例 第15章 库 291 15.1 例82 静态链接C/C++库 291 15.2 例83 动态链接C/C++库 295 15.3 例84 动态链接MFC扩展类库 300 15.4 例85 资源库 303 第五部分 附录 附录A 控件窗口风格 305 附录B 消息、控件通知和消息映像宏 323 附录C 访问其他应用程序类 328 附录D 开发中注意事项 330 附录E MFC快速参考指南 339
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值