VC++60 第十六章 VC++开发工具和MFC基础类库(四)

VC++ MFC 经典教程 – 基础篇 1.CP_YourFirstWindowsProgram.wmv 2.Windows_编程模型.wmv 3.MFC_第一个MFC程序设计.wmv 4.MFC_消息映射.wmv 5.MFC_使用向导快速进行MFC程序设计.wmv 6.MFC_字符集和TEXT宏.wmv 7.MFC_建立应用程序.wmv 8.MFC_第一个MFC程序设计(不用向导).wmv 9.MFC_Windows_GDI_设备描述... 阅读详情

VC++60 第十六章 VC++开发工具和MFC基础类库(四)

 

16.4 MFC基础类库

Microsoft提供了一个基础类库MFC,其中包含用来开发C++和C++ Windows应用程序的一组类。基础类库的核心是以C++形式封装了大部分的Windows API。类库表示窗口、对话框、设备上下文、公共GDI对象如画笔、调色板、控制框和其他标准的Windows部件。这些类提供了一个面向Windows中结构的简单的C++成员函数的接口。

1 基础类,宏和全程函数

MFC可分为两个主要部分:基础类,宏和全程函数。

1) MFC的基础类

MFC的基础类按功能来分可划分为以下几类:基类、应用程序框架类、应用程序类、命令相关类、文档/视类、线程类、可视对象类、窗口类、视类、对话框类、属性表、控制类、菜单、设备描述表、绘画对象类、通用类、文件、诊断、异常、收集、模板收集、其他支持类、OLE2类、OLE基类、OLE可视编辑包装程序类、OLE可视编辑服务器程序类、OLE数据传输类、OLE对话框类、其他OLE类、数据库类。

宏和全局函数

    若某个函数或变量不是某个类的一个成员,那么它是一个全程函数或变量。Microsoft基本宏和全程函数提供以下功能:

数据类型
运行时刻对象类型服务
诊断服务
异常处理
CString格式化及信息框显示
消息映射
应用消息和管理
对象连接和嵌入(OLE)服务
标准命令和Windows IDs

    

约定:全程函数以“Afx”为前缀,所有全程变量都是以“afx”为前缀,宏不带任何特别前缀,但是全部大写。常见的全局函数和宏有:AfxGetApp,AfxGetMainWnd,AfxMessageBox,DEBUG_NEW等。

2) MFC的消息机制

Windows消息的管理包括消息发送和处理。为了支持消息发送机制,MFC提供了三个函数:SendMessage、PostMessage和SendDlgItemMessage。而消息处理则相对来说显得复杂一些。MFC采用了一种新的机制取代C语言编程时对Windows消息的Switch/Case分支,简化了Windows编程,使程序可读性、可维护性大大提高。

MFC对消息的处理

   MFC采用一种消息映射机制来决定如何处理特定的消息,这种消息映射机制包括一组宏,用于标识消息处理函数、映射类成员函数和对应的消息等。其中,用afx_msg放在函数返回类型前面,用以标记它是一个消息处理成员函数。类若至少包含了一个消息处理函数,那么还需要加上一个DECLARE_MESSAGE_MAP()宏,该宏对程序执行部分所定义的消息映射进行初始化。例如:

//{{AFX_MSG(CMainFrame)
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnEditCopy();
    afx_msg void OnClose();
//}}AFX_MSG

    DECLARE_MESSAGE_MAP()

成员函数OnCreate,OnEditCopy,OnClose分别用来处理消息WM_CREATE、ID_EDIT_COPY和WM_CLOSE。其中,WM_CREATE和WM_CLOSE是系统预定义消息,包含在Windows.h中。而ID_EDIT_COPY是菜单Edit->Copy的标识,也就是用户选择Edit->Copy菜单项时产生的消息,一般在资源文件头文件中定义。在类的实现部分给出这三个成员函数的定义,以及特殊的消息映射宏。上面的例子的消息映射宏定义如下:

BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
    ON_WM_CREATE()
    ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
    ON_WM_CLOSE()
END_MESSAGE_MAP()

消息映射宏由BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()。其中,BEGIN_MESSAGE_MAP宏包含两个参数CMainFrame类和CFrameWnd,分别代表当前定义的类和它的父类。在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间,包含了主窗口要处理的各个Windows消息的入口。在本例中,包含三个消息。其中ON_ WM_CREATE被用来指定缺省的成员函数OnCreate与WM_CREATE相对应。在MFC中,包含了大量的预定义消息映射宏,用来指定各种成员函数与各种形如WM_XXXX消息相对应。如ON_WM_CLOSE宏指定了WM_CLOSE消息的处理成员函数为OnClose。这时侯,只需要写出要处理的消息就够了,不必再写出处理函数。消息映射宏ON_COMMAND则被用来将菜单项和用户自定义的命令同它们的处理成员函数联系起来。在上例中,用户选择Edit->Copy菜单项时,系统执行OnEditCopy()函数。ON_COMMAND宏的一般定义形式如下:

ON_COMMAND(command,command_function)

    其中,command为菜单消息或用户自定义消息,command_function为消息处理函数。

 

3 更新命令用户接口消息UPDATE_COMMAND_UI
在ClassWizard的Message Map页中,如果我们选择一个菜单ID,在Messages列表框中就会出现两项:
    COMMAND 和 UPDATE_COMMAND_UI,

其中UPDATE_COMMAND_UI就是更新命令用户接口消息,专门用于处理菜单项和工具条按钮的更新。每一个菜单命令都对应于一个更新命令用户接口消息。可以为更新命令用户接口消息编写消息处理函数来处理用户接口(包括菜单和工具条按钮)的更新。如果一条命令有多个用户接口对象(比如一个菜单项和一个工具条按钮),两者都被发送给同一个处理函数。这样,对于所有等价的用户接口对象来说,可以把用户接口更新代码封装在同一地方。

用户接口更新原理
  为了理解用户接口更新机制,我们来看一下应用框架是如何实现用户接口更新的。当我们选择Edit菜单时,将产生一条WM_INITMENUPOPUP消息。框架的更新机制将在菜单拉下之前集体更新所有的项,然后再显示该菜单。
  为了更新所有的菜单项,应用框架按标准的命令发送路线把该弹出式菜单中的所有菜单项的更新命令都发送出去。通过匹配命令和适当的消息映射条目(形式为ON_UPDATE_COMMAND_UI),并调用相应的更新处理器函数,就可以更新任何菜单项。比如,Edit菜单下有Undo、Cut、Copy、Paste等四个菜单项,就要发送四条用户接口更新命令。如果菜单项的命令ID有一个更新处理器,它就会被调用进行更新;如果不存在,则框架检查该命令ID的处理函数是否存在,并根据需要使菜单有效或无效。
  如果在命令发送期间找不到对应于该命令的ON_UPDATE_COMMAND_UI项,那么框架就检查是否存在一个命令的ON_COMMAND项,如果存在,则使该菜单有效,否则就使该菜单无效(灰化)。这种更新机制仅适用于弹出式菜单,对于顶层菜单象File和Edit菜单,就不能使用这种更新机制。
  按钮的命令更新机制与菜单的命令接口更新机制类似,只是工具条按钮的命令接口更新在空闲循环时完成。

 

4 学习MFC的方法

首先要对Windows API有一定的了解,否则无法深入学习MFC。至少要知道Windows对程序员来说意味着什么,它能完成什么工作,它的一些常用数据结构等。
另一点是不要过分依赖于Wizards。Wizards能做许多工作,但同时掩饰了太多的细节。应当看看AppWizard和ClassWizard为你所做的工作。在mainfrm.cpp中运行调试器来观察一下MFC运行的流程。除非你理解了生成的代码的含义,否则无法了解程序是如何运行的。
还有很重要的一点就是要学会抽象的把握问题,不求甚解。许多人一开始学习Visual C++就试图了解整个MFC类库,实际上那几乎是不可能的。一般的学习方法是,先大体上对MFC有个了解,知道它的概念、组成、基本约定等。从最简单的类入手,由浅入深,循序渐进、日积月累的学习。一开始使用MFC提供的类时,只需要知道它的一些常用的方法、外部接口,不必要去了解它的细节和内部实现,把它当做一个模块或者说黑盒子来用,这就是一种抽象的学习方法。在学到一定程度时,再可以深入研究,采用继承的方法对原有的类的行为进行修改和扩充,派生出自己所需的类。
学习MFC,最重要的一点是理解和使用MFC类库,而不是记忆。

——全书完  东方一峰于2009年4月—— 

MFC 扩展库 - CJ60Lib ( 针对Visual C++ 6.0进行的升级 ) 原来的库(MFCXLib)已经更名为CJ60Lib,这是为了与那些使用旧库的程序区别开来。本库与旧的库具有同样的功能,但是,针对Visual C++ 6.0作了几个扩展。请按照下面的步骤来设定你的应用程序使用CJ60Lib这个MFC扩展库: 在你的工程设定(project/setting)中,选择 General 标签,确保 Microsoft Foundation Class 被设置 阅读详情

相关推荐

基于VC++与MFC框架的弹球小游戏开发实战

Microsoft Foundation Classes(MFC)是对Windows API的C++封装,通过消息映射机制实现事件驱动编程。在弹球游戏中,CWinApp派生类管理程序生命周期,CFrameWnd创建主窗口,CView子类承载绘图与输入逻辑。private:// 私有构造函数public:// 重置所有状态private:获取实例的方式如下:// 添加新球// 遍历更新相比list或dequevector。

weixin_29885875的博客 748

孙鑫VC++第三章 2.基于MFC的程序框架剖析

基于MFC的程序框架剖析

qq_38446366的博客 1864

VC++ MFC对话框编程实战:圆桌报数与FLASH集成

Visual C++(简称VC++)是微软推出的一个C++开发工具集,它允许开发者使用C++语言来创建Windows应用程序。作为一种集成开发环境(IDE),VC++提供了丰富的库和工具,极大地简化了Windows平台下的应用程序开发。MFC(Microsoft Foundation Classes)是一个封装了Windows API的C++库,为开发者提供了面向对象的方式来编写Windows应用程序。

weixin_42418754的博客 315

MFC---MFC入门

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。MFC把Windows SDK API函数包装成了几百个类,MFC给Windows操作系统提供了面向对象的接口,支持可重用性、自包含性以及其他OPP原则。

Frank---7的博客 1168

Qt绘图库对决:QWT与QCustomPlot的实战选型指南

本文为Qt开发者提供了QWT与QCustomPlot两大绘图库的实战选型指南。文章从功能特性、性能资源、开发效率三大维度进行深度对比,并结合工业监控、科学计算、嵌入式设备等典型场景,给出了清晰的决策清单。对于需要专业科学图表(如极坐标、等高线图)的场景推荐QWT;对于追求高性能、实时性、快速开发及嵌入式部署的通用图表需求,QCustomPlot是更优选择。

alpha的博客 241

华中科技大学计算机组成原理-单总线CPU设计(全部通关)

【计算机组成原理】 单总线CPU实验 华中科技大学-计算机组成原理 实验三 单总线CPU设计 第1关 MIPS指令译码器设计 第2关 单总线CPU微程序入口查找逻辑 第3关 单总线CPU微程序条件判别测试逻辑 第4关 单总线CPU微程序控制器设计 第5关 采用微程序的单总线CPU设计 第6关 现代时序硬布线控制器状态机设计 第7关 现代时序硬布线控制器设计

紫荆鱼的博客 4万+

『Visual C++ MFC 简明教程』----第四部分:消息映射

第四部分:消息映射  应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:1) 它的外观,2) 它响应事件的行为。在上一讲中,你已经学习了CStatic控制和如何使用样式属性来定制用户界面对象的外观。这些概念可用于MFC中的所有不同控制类。  在本讲中,我们将介绍CButton控制,以理解消息映射和简单的事件处理。然后还要介绍使用CScrollBar控制的稍微复杂点的例子。  理解消息映射

blog of eulota 2429

应用软件——Altium Designer 19 Gerber/坐标文件

如何输出Gerber文件 步骤如下: 打开需要输出的PCB文件 2. 设置原点坐标 3. 打开Gerber Files 选项,File–>Fabrication Opuputs–>Gerber Files。 4. General参数设置。 用于指定输出Gerber文件中使用的单位(Units)和格式(Format)。单位可以是公制(Millimeters)和英制(Inches);格式栏中2:3,2:4,2:5代表文件中使用的不同数据精度,其中2:3表示数据含2位整数3位小数;相应的,另外两个分

染血黑兔的博客 7203

VC++60 第十六章 VC++开发工具和MFC基础类库(二)

VC++60 第十六章 VC++开发工具和MFC基础类库(二) 16.2 MFC类库的基本控件 1 基本控件 基本控件是WINDOWS V3.1就开始使用的控件,也就是本书前面各章逐一介绍的那些控件。它们是最基本的最常用的,主要有按钮、静态正文、编辑框、单选按钮和复选框(英文名Check,有人翻译为检查框)、列表框、组合框、组框(Group)、垂直和水平的滚动条,它们大部分在图c

GL_a_的博客 776

测站坐标系统 -- 东北天(ENU)坐标系、站心坐标系

测站坐标系统以观测站(或地面上某一个观测点为中心建立坐标系统,将这类坐标系称为测站坐标系统。测站坐标系通常以用户所在的位置点P为坐标原点三个坐标轴分别是相互垂直的东向北向和天向,因而测站坐标系又称为东北天(ENU)坐标系。由于测站坐标系以站心为坐标原点,因此也称为站心坐标系。如图所示,测站坐标系的天向与大地坐标系(LLA经纬度坐标系)在此点的高程方向一致。测站坐标系固定在地球上,本质上是一种地固坐标系。(1)以站心为坐标原点。(2)Z轴与站心点的椭球法线重合,向上为正。

qq_43381998的博客 1万+

分析android逆向的学习路线

俗话说:“一入逆向深似海,从此头发是路人”。 安卓逆向作为当下热门行业“网络安全”的主要技术之一,已经受到了越来越多人的青睐。但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。本文就分享一下android逆向的学习路线供大家参考。 目前学习安卓逆向的人群大约分为两种: 第一种是完全没有任何基础的计算机纯小白; 第二种是本来就做开发懂编程的IT行业人员。 我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。 一、无基础小白想入门 作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤: (一

Hacker_by_V的博客 3078

VC++60 第十六章 VC++开发工具和MFC基础类库(一)

第十六章 VC++开发工具和MFC基础类库   Visual C++是Microsoft公司推出的支持面向对象的“Windows软件”开发环境(Developer Studio),本书的叙述依赖的是6.0版,现在的最新版本是统一的“.NET”版。MFC类库(Microsoft Foundation Class Library)是与 VC++开发系统相结合的基础类库。它封装了许多常用的类

GL_a_的博客 874

如何使用AKShare作为OpenBB的数据源

`openbb_akshare`项目是 OpenBB 的数据源扩展。可以用于查询A股和港股数据

FinAnalyzer金融分析工具 3195

VC++ MFC 画图 详解(附源码)

(1)新建 MFC aplication exe 文件:painttool(2)在CPaintoo1View类的 OnDraw方法 添加如下代码:画图程序:Code: void CPaintoo1View::OnDraw(CDC* pDC)   {       CPaintoo1Doc* pDoc = GetDocument();  

jxusthusiwen的专栏 8225

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

本文描述串口DMA收/发机制设计,及STM32串口DMA收/发实现。

只要思想不滑坡,想法总比问题多。 5万+

SonarQube 完整手册(2026 最新)

摘要: SonarQube是一款静态代码分析(SAST)平台,支持20+语言(如Java/Go/Python),提供Bug、漏洞、代码异味等检测,集成DevOps流水线。其架构包含服务端、扫描器和SonarLint插件。2026年四大版本:免费社区版(基础功能)、开发者版(多分支/PR分析)、企业版(合规治理)、数据中心版(高可用集群)。核心功能包括质量门禁(QualityGate)、密钥泄露检测及六大质量指标。部署推荐Docker+PostgreSQL,扫描支持Maven/CLI方式。

SmallBull的博客 670

VC++60 第十六章 VC++开发工具和MFC基础类库(三)

VC++60 第十六章 VC++开发工具和MFC基础类库(三) 16.3 Windows应用程序的运行机制   1 Windows应用程序的特点 Windows编程与DOS环境下编程相比有很大的不同。Windows要求以一种全新的思维方式进行程序设计,Windows应用程序主要表现为以下四个特点: 1)事件驱动的程序设计    传统的MS-DOS程序主要采用顺序的、

GL_a_的博客 564

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

如何用VC++60编写查看二进制文件程序

如何用VC++60编写查看二进制文件程序 雷霆工作室 韩燕 ---- 在计算机应用中,经常需要查看二进制文件的内容。目前,在各种VC++书籍中介绍查看文本文件的文章很多,但鲜有介绍查看二进制文件的文章。本文从功能设计、方案设计、编程实现以及技术要点等方面来简单介绍。 ---- 1 功能设计 ---- 显示界面见图1(略),将窗口客户区划分为三部分,左边列用于以16进制方式显示文

iBreathe的专栏 2034

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[转] 如何用VC++60编写查看二进制文件程序

如何用VC++60编写查看二进制文件程序 雷霆工作室 韩燕 [请作者提供详细的邮政地址给我们] ---- 在计算机应用中,经常需要查看二进制文件的内容。目前,在各种VC++书籍中介绍查看文本文件的文章很多,但鲜有介绍查看二进制文件的文章。本文从功能设计、方案设计、编程实现以及技术要点等方面来简单介绍。 ---- 1 功能设计 ---- 显示界面见图1(略),将窗口客户区划分为三

chentangjun的专栏 540

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

用VC++60 查看二进制文件

在计算机应用中,经常需要查看二进制文件的内容。目前,在各种VC ++书籍中介绍查看文本文件的文章很多,但鲜有介绍查看二进制文件的文章。本文从功能设计、方案设计、编程实现以及技术要点等方面来简单介绍如何用VC ++60 查看二进制文件。  一、功能设计  显示界面将窗口客户区划分为

fjclc2008的专栏 1114

使用VC++6.0 MFC OLE操作Excel 进行简单的读写

使用VC++6.0 MFC OLE操作Excel 进行简单的读写 使用VC60 MFC OLE操作Excel 进行简单的读写 - 简单的准备工作 - 所需求的类库 - 写入操作 -读取操作 -总结- 简单的准备工作首先保证VC++6.0在你的电脑上正确地安装,当然我们用Visual Stdio也是一样的。然后,我们需要创建一个工程: 简单设置之后,我们我们得到一个基于对话框的基本MFC程序。

llwodao的专栏 9013

MFC学习(02) 矩形移动 (VC++6.0版本)

MFC学习(02) 矩形移动 (VC++6.0版本) 小注:这是一次计算机图形学的课后作业,作业原文:给定一个矩形(顶点和大小自己给定),利用鼠标与鼠标响应函数,如果鼠标落入矩形区域内,点击鼠标左键,矩形改变颜色(即作业中实现题2.exe示例中的虚线变为实线并着与初始矩形不同的色),移动鼠标,矩形进行移动,左键释放时矩形变为初始色。 仅供参考,不喜请喷 MFC学习02 矩形移动 VC6

Call_Me_Tony的博客 2186

MFC小游戏之坦克大战

这是基于MFC下的坦克大战游戏,编程工具使用VC++6.0。 下面将详细介绍如何一步一步实现坦克大战小游戏。 1.新建MFC工程 新建一个MFC工程,应用程序类型选择单文档类型,点击完成即可。 2.新建坦克大战类 3.定义结构体及变量 根据分析可知,坦克大战游戏主要有三个部分,即坦克,敌机,子弹。故在类的头文件中定义相应的结构体和变量。 由于坦克只有一个,敌机和子弹有多个,因此敌机和子弹使用结构体定义,坦克使用变量定义。在TanKeWar.h添加代码具体如下 typedef s

Zgh12138的博客 4511

C语言,C++,VC++,MFC之间的区别和联系

C语言是一种古老而又经久不衰的计算机程序设计语言,大约诞生于上个世纪60年代。由于它的设计有很多优点,多年以来深受广大程序设计人员的喜爱,并逐渐淘汰了很多其它程序设计语言。我们平时使用的大多数软件都是用C语言开发的。很多后来出现的一些语言也沿用了很多它的东西。C语言的编程方式是一种称为面向过程的开发方式。也就是说,解决问题的时候,程序员需要思考计算机应该如何一步一步完成这个问题,然后将相应过程转化...

Monster_H7的博客 6007

VC++实战进阶:从MFC控件到系统编程的100个实例解析

Windows桌面开发的核心在于理解消息循环、资源管理与框架协作机制。消息映射作为MFC框架的中枢神经系统,通过静态映射表将窗口消息与处理函数关联,是实现交互逻辑的基础。动态链接库(DLL)技术则提供了模块化部署与代码复用的工程价值,COM组件模型进一步扩展了跨语言协作能力。在桌面应用场景中,文档视图架构支撑了数据与界面的分离,而多线程与同步机制保障了复杂任务的响应性。本文聚焦VC++实战编程,通过100个覆盖控件操作、系统集成到项目演练的实例,系统拆解MFC消息映射、资源管理及动态链接库等关键技术,帮助开

weixin_30702441的博客 329

VC++开发软件动态链接库集合:解决MFC应用程序运行难题

VC++开发软件动态链接库集合:解决MFC应用程序运行难题 去发现同类优质开源项目:https://gitcode.com/ 在软件开发领域,动态链接库(DLL)的重要性不言而喻。VC++开发软件动态链接库集合,为开发者解决了许多基于MFC框架应用程序的运行问题。以下是这个项目的详细介绍。 项目介绍 VC++开发软件动态链接库集合,是一组专门为VC++开发环境下设计的动态链接库文件。这些文件包括m...

gitblog_06761的博客 515
上一篇: VC++60 第十六章 VC++开发工具和MFC基础类库(三)
下一篇: VS2010+OpenCV 项目生成EXE文件如何在其他电脑上直接运行
GL_a_
博客等级 码龄11年 29粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值