返回首页
苏宁会员
购物车 0
易付宝
手机苏宁

服务体验

店铺评分与同行业相比

用户评价:----

物流时效:----

售后服务:----

  • 服务承诺: 正品保障
  • 公司名称:
  • 所 在 地:

  • 正版新书]Visual C++程序设计黄永才、金韬、刘伟杰、李牧、刘立
  • 全店均为全新正版书籍,欢迎选购!新疆西藏青海(可包挂刷).港澳台及海外地区bu bao快递
    • 作者: 黄永才、金韬、刘伟杰、李牧、刘立君著 | 黄永才、金韬、刘伟杰、李牧、刘立君编 | 黄永才、金韬、刘伟杰、李牧、刘立君译 | 黄永才、金韬、刘伟杰、李牧、刘立君绘
    • 出版社: 清华大学出版社
    • 出版时间:2017-02-01
    送至
  • 由""直接销售和发货,并提供售后服务
  • 加入购物车 购买电子书
    服务

    看了又看

    商品预定流程:

    查看大图
    /
    ×

    苏宁商家

    商家:
    君凤文轩图书专营店
    联系:
    • 商品

    • 服务

    • 物流

    搜索店内商品

    商品分类

    商品参数
    • 作者: 黄永才、金韬、刘伟杰、李牧、刘立君著| 黄永才、金韬、刘伟杰、李牧、刘立君编| 黄永才、金韬、刘伟杰、李牧、刘立君译| 黄永才、金韬、刘伟杰、李牧、刘立君绘
    • 出版社:清华大学出版社
    • 出版时间:2017-02-01
    • 开本:32开
    • ISBN:9787302416258
    • 版权提供:清华大学出版社
    • 作者:黄永才、金韬、刘伟杰、李牧、刘立君
    • 著:黄永才、金韬、刘伟杰、李牧、刘立君
    • 装帧:平装-胶订
    • 印次:暂无
    • 定价:89
    • ISBN:9787302416258
    • 出版社:清华大学出版社
    • 开本:32开
    • 印刷时间:暂无
    • 语种:暂无
    • 出版时间:2017-02-01
    • 页数:暂无
    • 外部编号:党庄B177687
    • 版次:暂无
    • 成品尺寸:暂无


    Visual C 程序设计

    部分C 与面向对象

    第1章C 基础

    1.1从C到C

    1.1.1面向过程的C语言

    1.1.2面向对象的C 语言

    1.1.3C 对C语言的改进

    1.1.4Visual C 和Visual Studio

    1.2一个简单的Win32控制台应用程序

    1.2.1创建简单的Win32控制台应用程序

    1.2.2Win32控制台应用程序的入口函数

    1.2.3预处理命令

    1.2.4Win32控制台应用程序的命名空间

    1.3C 对C语言的扩充

    1.3.1注释语句

    1.3.2C 的输入输出

    1.3.3变量的存储类型

    1.3.4函数的默认参数

    1.3.5函数重载

    1.3.6内联函数

    1.3.7引用和引用传递

    1.3.8用const定义常变量

    1.3.9字符串变量

    1.3.10内存动态分配与撤销运算符new和delete

    1.3.11命名空间

    第2章面向对象的C

    2.1面向对象概述

    2.1.1面向对象的概念

    2.1.2类的特性

    2.2类与对象

    2.2.1类的声明和对象的定义

    2.2.2类的成员函数

    2.2.3对象的使用以及对成员的访问

    2.2.4构造函数与析构函数

    2.2.5const对象和const成员函数

    2.2.6对象的动态建立和释放

    2.2.7this指针

    2.2.8友元函数和友元类

    2.2.9类的静态成员和静态成员函数

    2.3继承与派生

    2.3.1继承的概念及意义

    2.3.2派生类的定义

    2.3.3派生类成员的访问权限

    2.3.4派生类的构造函数和析构函数

    2.3.5多继承

    2.4多态性

    2.4.1多态性的概念

    2.4.2运算符重载

    2.4.3虚函数与纯虚函数

    第二部分MFC应用程序

    第3章MFC编程基础

    3.1应用程序向导生成MFC应用程序

    3.1.1Visual C 2010集成开发环境

    3.1.2应用程序向导生成MFC应用程序

    3.1.3项目的文件组织

    3.1.4应用程序向导生成基于对话框的应用程序案例

    3.2MFC类

    3.2.1MFC类结构

    3.2.2添加成员变量与成员函数

    3.2.3MFC类向导

    3.2.4类的添加与删除

    3.2.5MFC类案例

    3.2.6对话框的数据交换机制

    3.3消息和消息映射

    3.3.1消息及消息的分类

    3.3.2MFC常用消息及其消息映射函数

    3.3.3消息映射

    3.3.4消息映射案例

    第4章资源与对话框

    4.1资源

    4.1.1资源的分类

    4.1.2创建资源

    4.2创建对话框

    4.2.1创建新的对话框模板

    4.2.2设置对话框属性

    4.2.3创建对话框类

    4.2.4调用显示对话框

    4.2.5对话框案例

    4.3消息对话框

    4.3.1MessageBox()函数

    4.3.2AfxMessageBox()函数

    4.3.3消息对话框案例

    第5章控件

    5.1控件的添加与布局设计

    5.1.1工具箱

    5.1.2添加和删除控件

    5.1.3属性

    5.1.4事件

    5.1.5控件布局

    5.2静态控件

    5.2.1静态文本控件

    5.2.2组框控件

    5.2.3图片控件

    5.3编辑框

    5.3.1编辑框的常用属性和消息

    5.3.2常用的成员函数

    5.3.3编辑框和静态文本案例

    5.4按钮控件

    5.4.1常用属性和消息

    5.4.2按钮类的主要成员函数

    5.4.3按钮和组框控件案例

    5.5列表框控件

    5.5.1常用属性和消息

    5.5.2列表框类的主要成员函数

    5.6组合框控件

    5.6.1常用属性和消息

    5.6.2组合框类的主要成员函数

    5.6.3列表框和组合框控件案例

    5.7滚动条控件

    5.7.1滚动条控件的种类

    5.7.2滚动条类的主要成员函数

    5.8进度条

    5.8.1进度条的属性

    5.8.2进度条类的主要成员函数

    5.9滑动条

    5.9.1滑动条控件的属性

    5.9.2滑动条类的主要成员函数

    5.9.3滑动条和进度条控件案例

    第6章菜单、工具栏和状态栏

    6.1菜单

    6.1.1菜单设计

    6.1.2给菜单项添加消息处理

    6.1.3动态添加菜单

    6.1.4菜单案例

    6.1.5弹出式菜单

    6.1.6弹出式菜单案例

    6.2工具栏

    6.2.1工具栏编辑器

    6.2.2工具栏案例

    6.3状态栏

    6.3.1状态栏的定义

    6.3.2状态栏的常用操作

    6.3.3状态栏案例

    第7章文档与视图

    7.1文档应用程序中的字符串资源

    7.2文档序列化

    7.2.1序列化概述

    7.2.2CArchive类和序列化操作

    7.2.3文档序列化案例

    7.3一般视图框架

    7.3.1CEditView

    7.3.2CFormView

    7.3.3CScrollView

    7.4列表视图框架

    7.4.1列表视图的样式

    7.4.2列表项的基本操作

    7.4.3列表控件的消息

    7.4.4列表视图控件案例

    7.5文档视图结构

    7.5.1文档与视图的相互作用

    7.5.2应用程序对象指针的互调

    7.5.3一档多视

    7.5.4一档多视案例1——静态切分窗口

    7.5.5一档多视案例2——动态切分窗口

    第8章文本与图形

    8.1图形绘制基础

    8.1.1一个简单的图形绘制案例

    8.1.2坐标与映射模式

    8.1.3简单数据类CPoint、CSize和CRect

    8.1.4MFC中的颜色

    8.1.5MFC中颜色应用案例

    8.1.6OnDraw函数

    8.2设备环境类

    8.2.1CDC类

    8.2.2用CDC类的成员函数绘图

    8.3图形设备接口

    8.3.1GDI及其使用方法

    8.3.2画笔

    8.3.3画笔应用案例

    8.3.4画刷

    8.3.5画刷应用案例

    8.4绘制文本

    8.4.1CDC类的文本输出函数

    8.4.2字体的基本类型、字体类与字体对话框

    8.4.3字符的几何尺寸

    8.4.4文本显示案例

    第9章数据库编程

    9.1MFC中的ODBC类

    9.1.1CDatabase类

    9.1.2CRecordset类

    9.1.3CRecordView类

    9.2创建ODBC数据库应用程序

    9.2.1创建MFC ODBC应用程序一般过程

    9.2.2构造数据库

    9.2.3创建ODBC数据源

    9.2.4数据库应用案例

    9.2.5设计操作界面

    9.2.6数据的查询、添加和删除

    9.2.7排序与筛选

    第三部分Windows Form应用程序

    第10章Windows Form编程基础

    10.1一个简单的Windows Form应用程序

    10.1.1Hello应用程序

    10.1.2新建Windows 窗体应用程序

    10.1.3向窗体添加控件

    10.1.4属性设置与界面布局

    10.1.5编写代码

    10.1.6次生成并执行窗体应用程序

    10.1.7重新修改标签控件的属性

    10.1.8终的Hello应用程序

    10.2Windows Form 基础

    10.2.1.NET与Windows Form概述

    10.2.2托管

    10.2.3.NET类库中的常用命名空间与常用类

    10.2.4C /CLI的基本数据类型

    10.2.5引用类型、跟踪句柄及托管对象的使用

    10.2.6字符串

    10.2.7数组

    10.2.8自定义引用类型类

    10.2.9事件及事件处理程序

    10.2.10几个常用类和常用结构

    10.3Windows Form编程常用操作

    10.3.1Windows Form编程环境简介

    10.3.2成员函数和成员变量的添加与删除

    10.3.3事件处理程序的创建与删除

    10.3.4如何获得帮助

    第11章Windows Form控件与对话框

    11.1控件

    11.1.1标签与图片

    11.1.2按钮

    11.1.3文本框和富文本框

    11.1.4标签、按钮及文本框控件应用案例

    11.1.5单选按钮与复选框

    11.1.6单选按钮、复选框及分组框应用案例

    11.1.7进度条、滚动条、滑块

    11.1.8滚动条、文本框、按钮及颜色应用案例

    11.1.9与时间有关的控件

    11.1.10进度条与计时器应用案例

    11.1.11下拉列表框与列表框

    11.1.12列表框、下拉列表框及日期时间选择控件应用案例

    11.1.13常用控件综合应用案例

    11.2常用对话框

    11.2.1消息对话框

    11.2.2文件的打开与关闭对话框

    11.2.3文件打开与保存应用案例

    11.2.4字体与颜色对话框

    第12章Windows Form图形绘制初步

    12.1图形设备接口GDI

    12.1.1System::Drawing命名空间中的常用类和数据结构

    12.1.2坐标与颜色

    12.1.3图形绘制常用数据类型

    12.2用Graphics和Pen绘制图形

    12.2.1图形绘制步骤及创建方式

    12.2.2用Pen类设置线条属性

    12.2.3利用Graphics类绘制图形和文字

    12.2.4简单图形绘制案例

    12.3用Brush类填充颜色

    12.3.1Brush类的派生类

    12.3.2填充单一颜色

    12.3.3用样式填充

    12.3.4渐变式填充

    12.4绘图应用程序综合案例

    12.4.1时钟应用程序Clock

    12.4.2绘制静态的时钟表盘

    12.4.3绘制动态的时钟指针

    12.4.4实现时钟所在窗体的透明、缩放及拖动功能

    第四部分习题

    第1章C 基础习题

    第2章面向对象的C 习题

    第3章MFC编程基础习题

    第4章资源与对话框习题

    第5章控件习题

    第6章菜单、工具栏和状态栏习题

    第7章文档与视图习题

    第8章文本与图形习题

    第9章数据库编程习题

    第10章Windows Form编程基础习题

    第11章Windows Form控件与对话框习题

    第12章Windows Form图形绘制初步习题

    第五部分实验

    实验一基本输入输出、变量声明及函数的默认参数

    实验二函数重载、引用传递与内存动态分配

    实验三类与对象

    实验四继承与派生

    实验五虚函数与运算符重载

    实验六MFC应用程序与对话框

    实验七控件(一)

    实验八控件(二)

    实验九菜单与工具栏

    实验十文档与视图

    实验十一文本与图形

    实验十二数据库编程

    实验十三Windows Form编程基础

    实验十四Windows Form控件与对话框(一)

    实验十五Windows Form控件与对话框(二)

    实验十六Windows Form 图形绘制

    参考文献


    【前言】


    图3.4【新建项目】对话框

    可以在【新建项目】对话框中查找已安装的项目模板,方法是浏览【已安装模板】下方左侧窗口中的展开列表。还可以在【近的模板】下浏览近创建的项目类型,也可以在【联机模板】下浏览Visual Studio Gallery网站上提供的模板。还可以使用对话框右上角的搜索框来搜索项目模板。根据选择的类别,搜索会在中间窗口中显示从近的模板、已安装的模板或联机模板列表中搜索的结果。3. 【欢迎使用MFC应用程序向导】对话框步骤: 单击【下一步】按钮,如图3.5所示。【欢迎使用MFC应用程序向导】对话框中概述一些当前项目设置情况,对话框的左侧是一些导航菜单,单击会转到对应的对话框。


    图3.5【欢迎使用MFC应用程序向导】对话框

    4. 【应用程序类型】对话框步骤: 选择【应用程序类型】为【多个文档】,【项目类型】为【MFC标准】,单击【下一步】按钮,如图3.6所示。

    图3.6【应用程序类型】对话框
    1) 【应用程序类型】选择的应用程序类型决定了应用程序中可用的用户界面选项,如表3.1所示。



    表3.1应用程序类型


    选项描述单文档为应用程序创建一个单文档界面(SDI)结构。在此类应用程序中,文档的框架窗口只能容纳一个文档多文档为应用程序创建一个多文档界面(MDI)结构。在此类应用程序中,文档的框架窗口可以容纳多个子文档选项卡式文档将每个文档放置到单独的选项卡上基于对话框为应用程序创建一个基于对话框的结构使用HTML对话框只适用于对话框应用程序。从CDHtmlDialogClass(而不是CDialogClass)派生对话框类多个文档为应用程序创建一个多结构。在此类应用程序中,当用户单击【文件】菜单上的【新建】命令时,应用程序会创建一个其父窗口隐式为桌面的窗口。新的文档框架会显示在任务栏中,并且不局限于应用程序窗口的工作区


    2) 【文档/视图结构支持】指定应用程序中是否包含文档/视图结构。如果要移植非MFC应用程序或者希望减小编译生成的可执行文件的大小,则清除此复选框。3) 【资源语言】设置资源的语言。列表显示系统上由Visual Studio安装的可用语言。如果要选择系统语言以外的语言,则必须已经安装了该语言的适当模板文件夹。4) 【使用Unicode库】指定是使用Unicode版MFC库还是使用非Unicode版MFC库。5) 【项目类型】指示应用程序的结构和显示样式是标准MFC、Windows资源管理器、Visual Studio还是Office样式。6) 【视觉样式和颜色】确定应用程序的视觉样式。7) 【启用视觉样式切换】指定在运行时,用户通常是否可以通过从菜单或工作区中选择适当的视觉样式来更改应用程序的视觉样式。8) 【MFC的使用】指定如何链接到MFC库。默认情况下,MFC作为共享DLL链接,如表3.2所示。


    表3.2MFC的使用


    选项说明
    使用共享DLL中的MFC将MFC库作为共享DLL链接到应用程序。应用程序在运行时调用MFC库使用静态库中的MFC生成时将应用程序链接到静态MFC库


    5. 【复合文档支持】对话框步骤: 选择默认选项,单击【下一步】按钮,如图3.7所示。


    图3.7【复合文档支持】对话框

    在此MFC应用程序向导页中,指示应用程序提供的复合文档和活动文档支持级别。应用程序必须支持文档/视图结构才能支持复合文档和文档模板。默认情况下,应用程序不包含复合文档支持。6. 【文档模板属性】对话框步骤: 保持默认选项,单击【下一步】按钮,如图3.8所示。


    图3.8【文档模板属性】对话框

    在此MFC应用程序向导页中,提供了帮助文档管理和本地化的选项。文档模板字符串对于在应用程序类型中包含【文档/视图结构支持】的应用程序可用。它们对于对话框不可用。7. 【数据库支持】对话框步骤: 保持默认选项,单击【下一步】按钮,如图3.9所示。


    图3.9【数据库支持】对话框

    指定是否提供数据库支持,及提供的数据库支持级别的选项。8. 【用户界面功能】对话框步骤: 保持默认选项,单击【下一步】按钮,如图3.10所示。


    图3.10【用户界面功能】对话框

    【用户界面功能】对话框用来指定应用程序外观的选项,如系统菜单、状态栏、化和小化框、关于框、菜单栏和工具栏以及子框架等。1) 【主框架样式】设置应用程序的主窗口框架样式,如表3.3所示。

    表3.3主窗口框架样式


    选项说明粗框架创建可调整边框的窗口。默认值小化框在主框架窗口中包含小化框。默认值化框在主框架窗口中包含化框。默认值小化将主框架窗口作为图标打开化打开主框架窗口至满屏显示系统菜单在主框架窗口中包含系统菜单。默认值“关于”框使应用程序包含关于框初始状态栏向应用程序添加状态栏。默认情况下,应用程序有状态栏。对基于对话框的应用程序类型不可用拆分窗口提供拆分条。拆分条拆分应用程序的主视图。对基于对话框的应用程序类型不可用


    2) 【子框架样式】指定应用程序中子框架的外观和初始状态。子框架样式仅对MDI应用程序可用。3) 【命令栏(菜单/工具栏/功能区)】指示应用程序是否包含菜单、工具栏或功能区。对基于对话框的应用程序不可用。4) 【对话框标题】此标题显示在对话框的标题栏中。只适用于基于对话框的项目。9. 【高级功能】对话框步骤: 保持默认选项,单击【下一步】按钮,如图3.11所示。


    图3.11【高级功能】对话框

    本主题列出了应用程序的附加功能选项,如帮助、打印支持等。10. 【生成的类】对话框步骤: 保持默认选项,单击【完成】按钮,如图3.12所示。

    图3.12【生成的类】对话框

    列出了项目生成的基类和文件的名称。默认情况下,名称基于在【新建项目】对话框中指定的项目名称,也可以更改名称。1) 【生成的类】为项目创建的所有类的名称。默认情况下,名称基于项目名称。默认MFC项目会创建一个C项目名View类、一个C项目名App类、一个C项目名Doc类、一个CMainFrame类和一个CChildFrame类。2) 【类名】类的名称,类名的任何更改都将显示在【生成的类】列表中。3) 【.h文件】类的头文件名称。4) 【基类】类的基类名称,可以从列表中为基类选择另一个类。5) 【.cpp文件】与类相关联的源代码文件的名称。11. 生成解决方案步骤: 单击【生成】→【生成解决方案】菜单项,如图3.13所示。

    图3.13生成解决方案
    12. 开始执行步骤: 单击【调试】→【开始执行(不调试)】菜单项,如图3.14所示。运行结果如图3.15所示。

    图3.14执行菜单




    图3.15运行结果

    如果生成单文档应用程序,只需在上面的【应用程序类型】对话框中,在【应用程序类型】中选择【单个文档】。如果生成基于对话框的应用程序,只需在【应用程序类型】中选择【基于对话框】即可。


    表3.4项目和解决方案文件


    文件名说明*.sln解决方案文件。它将一个或多个项目的所有元素组织到一个解决方案中*.suo解决方案选项文件。它存储解决方案的自定义项,以便每次在解决方案中打开项目或文件时具有所需的外观和行为*.vcxproj项目文件。存储项目的专用信息*.sdf浏览数据库文件*.vcxproj.filters筛选器文件。指定要添加到解决方案中的文件的位置*.vcxproj.user迁移用户文件Readme.txt自述文件。它由应用程序向导生成,并描述在项目中的文件

    2. 应用程序源文件和头文件应用程序向导会根据应用程序的类型(单文档、多文档或基于对话框的程序)自动生成一些头文件和源文件,如表3.5所示。这些文件是项目的主体部分,用于实现主框架、文档、视图等,具体视所创建项目选择的选项而不同。

    表3.5源文件和头文件


    文件名说明
    *.h程序或DLL的主包含文件。它包含其他头文件的所有全局符号和#include指令*.cpp主程序源文件。它注册文档模板,以用作文档和视窗之间的连接; 创建主框架窗口及创建空文档*Dlg.cpp
    *Dlg.h基于对话框的应用程序时创建。包含初始化对话框和执行对话框数据交换(DDX)的主干成员函数*Doc.cpp
    *Doc.h包含初始化文档、序列化文档和实现调试诊断的主干成员函数*Set.h
    *Set.cpp创建支持数据库且包含记录集类的程序时创建*View.cpp
    *View.h用于显示和打印文档数据
    MainFrm.cpp、MainFrm.hCMainFrame类处理工具栏按钮和状态栏的创建ChildFrm.cpp、ChildFrm.h用于MDI文档框架窗口



    图3.16运行结果

    步骤: 1. 启动【应用程序向导】新建项目打开Visual Studio 2010开发环境主窗口,单击【文件】→【新建】→【项目】菜单,如图3.17所示。


    图3.17新建项目




    图3.18【新建项目】对话框

    3. 【欢迎使用MFC应用程序向导】对话框单击【下一步】按钮,如图3.19所示。


    图3.19【欢迎使用MFC应用程序向导】对话框

    4. 【应用程序类型】对话框【应用程序类型】选择【基于对话框】,【项目类型】选择为【MFC标准】,将【使用Unicode库】选项去掉,单击【完成】按钮,如图3.20所示。


    图3.20【应用程序类型】对话框

    5. 生成解决方案并运行单击【生成】→【生成解决方案】菜单或按F7键,单击【调试】→【开始执行】菜单或按Ctrl F5键。3.2MFC类3.2.1MFC类结构
    Visual C 是通过【类视图】来管理应用程序的各个类的。1. 类视图打开【类视图】的方法: 单击【视图】→【类视图】菜单。【类视图】用于显示正在开发的应用程序中定义、引用或调用的符号。可以使用【类视图】打开文件。【类视图】有两个窗口: 上部的【对象】窗口和下部的【成员】窗口。【对象】窗口包含一个可以展开的符号树,其节点表示项目。若要展开树中选定的节点,请单击其加号( )。图标用于标识项目中使用的分层结构,可以展开这些结构以列出其成员。【成员】窗口中列出了属性、方法、事件、变量、常量和包含的其他项。

    图3.21【类视图】工具栏
    1) 【类视图】工具栏【类视图】工具栏(如图3.21所示)可以添加虚拟文件夹并在【对象】和【成员】窗口中定位。【类视图新建文件夹】: 创建一个新文件夹或子文件夹。【后退】: 定位到以前选定的项。【前进】: 定位到下一个选定的项。【类视图设置】: 为选定的项目显示的可用对象和成员。下面列出了可用选项: 显示基类型、显示派生类型、显示项目引用、显示隐藏类型和成员、显示公共成员、显示保护的成员、显示私有成员、显示其他成员和显示继承成员。2) 【对象】窗口【对象】窗口包含一个可以展开的符号树,其节点表示项目。在【对象】窗口中选择一个对象后,【成员】窗口中会显示其成员。双击对象一般会打开对应的头文件(.h文件)。3) 【成员】窗口每个对象都可以包含诸如属性、方法、事件、常量、变量和枚举值之类的成员。在【对象】窗口中选择一个对象后,【成员】窗口中会显示其成员。双击对象一般会打开对应的实现文件(.cpp文件)。4) 在【类视图】中实现定位符号的定义及引用位置【类视图】提供了若干命令来定位到符号的定义及其在代码中的使用(引用)。双击符号可定位到在代码中定义的这些符号。(1) 定位到定义或声明双击符号或鼠标右击符号,然后选择【转到定义】或【转到声明】菜单项。(2) 查找所有引用鼠标右击符号并选择【查找所有引用】菜单项。【查找符号结果】窗口中列出了项目中找到的符号的实例。在【查找符号结果】窗口中,双击该项可以在代码中定位符号实例。2. MFC类结构打开3.1.2节MFC应用程序向导生成的应用程序Firstmfc,单击【视图】→【类视图】菜单来打开类视图,会看到包括如下的类。(1) 项目的视图类: CFirstmfcView类,派生自CView类。(2) 项目的应用程序类: CFirstmfcApp,派生自CWinAppEx类,CWinAppEx类派生自CWinApp类。(3) 项目的文档类: CFirstmfcDoc,派生自CDocument类。(4) 项目的主框架类: CMainFrame类,派生自CFrameWndEx,CFrameWndEx类派生自CFrameWnd类。(5) 项目的对话框类: CAboutDlg,派生自CDialogEx类,CDialogEx类派生自CDialog类。MFC类的基本层次结构如图3.22所示。


    图3.22MFC类的基本层次结构

    1) CObject类由于MFC中大部分类是从CObject类继承而来的,CObject类描述了几乎所有的MFC类的一些公共特性,CObject类为程序员提供了对象诊断、运行时类型识别和序列化等功能。2) CCmdTarget类CCmdTarget类由CObject类直接派生而来,它负责将消息发送到能够响应这些消息的对象,它是所有能进行消息映射的MFC类的基类。3) CWinApp类在任何MFC应用程序中有且仅有一个CWinApp派生类的对象,它代表了程序中运行的主线程,也代表了应用程序本身。CWinApp类派生出CWinAppEx类。4) CWnd类CWnd类由CCmdTarget类直接派生而来,该类及其派生类的实例是一个窗口。它是一个功能完善、成员函数多的MFC类。窗口的实例包括应用程序主窗口、对话框和控件等。CWnd类提供的功能包括注册新窗口类、创建窗口及子窗口、管理窗口及控件等。5) CFrameWnd类CFrameWnd类是CWnd类的派生类,主要用来掌管一个窗口。CFrameWnd类的对象是一个框架窗口,包括边框、标题栏、菜单、化按钮、小化按钮和一个激活的视图。CFrameWnd支持SDI界面,对于MDI界面,使用其两个派生类CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd派生出CMDIFrameWndEx类,CMDIChildWnd派生出CMDIChildWndEx类。6) CDocument类CDocument类在应用程序中作为用户文档类的基类,它代表了用户存储或打开的一个文件。CDocument类的主要功能是把对数据的处理从对用户的界面处理中分离出来,同时提供了一个与视图类交互的接口。CDocument类支持标准的文件操作,如创建、打开和存储一个文档等。7) CView类CView类是MFC中一个很基本的类,它作为其他MFC视图类和用户视图派生类的基类。8) CDialog类CDialog类是对话框的基类,CDialog类派生出CDialogEx类。3.2.2添加成员变量与成员函数1. 添加成员变量
    可以通过【添加成员变量向导】添加成员变量。1) 打开【添加成员变量向导】的两种方法(1) 在【类视图】中,单击要添加变量的类,单击【项目】→【添加变量】菜单,或鼠标右击要添加变量的类,在快捷菜单中,单击【添加】→【添加变量】菜单,显示【添加成员变量向导】,如图3.23所示。

    图3.23【添加成员变量向导】对话框

    (2) 在【资源视图】中,双击要添加成员的对话框,在对话框编辑器中显示的对话框中,鼠标右击要添加成员变量的控件,在快捷菜单中单击【添加变量】显示【添加成员变量向导】。2) 【添加成员变量向导】对话框该向导将成员变量声明添加到头文件,根据具体的选项,它还可以将代码添加到.cpp文件。(1) 【访问】设置对成员变量的访问。访问修饰符是指定其他类对成员变量的访问的关键字。可以为public(公有)、protected(保护的)、private(私有)。默认情况下,成员变量的访问级别设置为public。(2) 【变量类型】设置正在添加的成员变量的类型。如果【类别】选择Control,则【变量类型】指定在【控件ID】框中选择的控件的基类。如果控件【类别】选择Value时,【变量类型】指定该控件可以包含的值的适当类型。(3) 【变量名】设置正在添加的成员变量的名称。成员变量通常以标识字符串“m_”开头,默认情况下会提供此标识字符串。(4) 【控件变量】此选项仅对添加到从CDialog导出的类的成员变量可用。选择此框将激活【控件ID】和【控件类型】选项。(5) 【控件ID】设置正在添加的控件变量的ID,从列表中选择正在为其添加成员变量的控件类型的ID。列表仅在【控件变量】被选中时,并且仅包含已添加到对话框的控件的ID。例如,对于标准的【确定】按钮,控件ID为IDOK。(6) 【类别】指定变量是基于控件类型还是控件的值。(7) 【控件类型】设置正在添加的控件类型,此框不可更改。例如,按钮的控件类型为BUTTON,而组合框的控件类型为COMBOBOX。(8) 【字符数】仅在【变量类型】设置为CString时可用,指示控件多可以保留的字符数。(9) 【小值】仅当变量类型为BOOL、int、UINT、long、DWORD、float、double、BYTE、short、COleCurrency或CTime时可用,指示可接受的小值。(10) 【值】仅当变量类型为BOOL、int、UINT、long、DWORD、float、double、BYTE、short、COLECurrency或CTime时可用,指示可接受的值。(11) 【.h文件】设置添加类声明的头文件名。(12) 【.cpp文件】设置添加类定义的实现文件名。(13) 【注释】提供成员变量头文件中的注释。

    2. 添加成员函数可以在【类视图】中通过【添加成员函数向导】将成员函数添加到任何类。【添加成员函数向导】将声明添加到头文件,将成员函数体添加到类实现文件。1) 打开【添加成员函数向导】的方法在【类视图】中,单击要添加成员函数的类,单击【项目】→【添加函数】菜单,或鼠标右击要添加成员函数的类,在快捷菜单中,单击【添加】→【添加函数】菜单。2) 【添加成员函数向导】对话框【添加成员函数向导】对话框(如图3.24所示)可以实现添加成员函数的功能。

    图3.24【添加成员函数向导】对话框

    (1) 【返回类型】设置要添加的成员函数的返回类型。可以提供自己的返回类型,或从可用类型列表中选择。(2) 【函数名】设置要添加的成员函数的名称。(3) 【参数类型】如果要添加的成员函数有参数,设置该函数的参数类型。可以提供自己的参数类型,或从可用类型列表中选择。(4) 【参数名】如果要添加的成员函数有参数,设置该函数的参数名。(5) 【参数列表】显示已经添加到成员函数的参数列表。若要向该列表添加参数,在【参数类型】和【参数名】框中提供类型和名称并单击【添加】按钮。若要从该列表中移除某个参数,选择该参数并单击【移除】按钮。(6) 【访问】设置对成员函数的访问的关键字。可以为public(公有)、protected(保护的)、private(私有)。默认情况下,成员函数的访问级别设置为public。(7) 【静态】、【虚函数】、【纯虚函数】和【内联】设置新成员函数是静态的还是虚函数、纯虚函数还是内联函数。(8) 【.cpp文件】设置成员函数实现写入的文件位置。默认情况下,写入成员函数添加到的类的.cpp文件。单击省略号按钮可以更改文件名,成员函数实现被添加到选定文件的内容中。(9) 【注释】提供成员函数头文件中的注释。(10) 【函数签名】显示单击【完成】按钮时成员函数出现在代码中的样子,无法编辑此框中的文本。3.2.3MFC类向导可以通过类向导向类中添加: 消息、消息处理程序、成员变量和方法(成员函数),还可以向项目中添加类。打开【MFC类向导】的方法: 单击【项目】→【类向导】菜单,或在【类视图】或【解决方案资源管理器】中单击鼠标右键,在弹出的菜单中单击【类向导】菜单,即可显示【MFC类向导】对话框,如图3.25所示。

    图3.25【MFC类向导】对话框
    1. 【项目】解决方案中项目的名称。2. 【类名】项目中类的名称。3. 【添加类】可以通过【MFC类】、【类型库中MFC类】、【ActiveX控件中的MFC类】或【MFCODBC使用者】来添加类。4. 【基类】显示在【类名】中的类的基类。5. 【类声明】类的声明文件的名称。6. 【类实现】类的实现文件的名称,可以通过单击箭头选择一个不同的实现文件。7. 【资源】【类名】中如果需要有资源ID,否则【资源】框为空。8. 【命令】选择【命令】选项卡,可以添加、删除、编辑或搜索命令和其消息处理程序。(1) 添加处理程序: 选择【对象ID】和【消息】列表中的选项,单击【添加处理程序】按钮。(2) 删除处理程序: 在【成员函数】列表中选择一个选项,然后单击【删除处理程序】按钮。(3) 编辑代码: 双击【成员函数】列表中相应的选项,或在【成员函数】列表中选择一个选项,然后单击【编辑代码】按钮。9. 【消息】选择【消息】选项卡,可以添加、删除、编辑或搜索消息和其消息处理程序。1) 添加处理程序选择【消息】列表中的选项,单击【添加处理程序】按钮,或双击【消息】列表中的选项。2) 删除处理程序在【现有处理程序】列表中选择一个选项,然后单击【删除处理程序】按钮。3) 编辑代码双击【现有处理程序】列表中相应的选项,或在【现有处理程序】列表中选择一个选项,然后单击【编辑代码】按钮。4) 添加自定义消息单击【添加自定义消息】按钮,然后在【添加自定义消息】对话框中指定值。10. 【虚函数】选择【虚函数】选项卡,可以允许添加、删除、编辑或搜索一个虚拟的函数或重写的虚函数。11. 【成员变量】选择【成员变量】选项卡可以添加、删除、编辑或搜索成员变量。1) 为控件添加关联变量选择【成员变量】页面,在【成员变量】列表中选中控件,单击【添加变量】按钮,弹出【添加成员变量】对话框,在【成员变量名称】文本框中输入变量名,在【类别】下拉列表中选中类别,在【变量类型】下拉列表中选中变量的类型,如图3.26所示。2) 自定义成员变量选择【成员变量】页面,单击【添加自定义】按钮,在弹出的【添加成员变量】对话框中,在【变量类型】下拉列表中选择变量的类型,在【变量名】编辑框中输入变量名,在访问权限组中,选择访问类型,如图3.27所示。


    图3.26【添加成员变量】对话框



    图3.27自定义成员变量


    3) 删除成员变量选择【成员变量】页面,在【成员变量】列表框中选中变量,单击【删除变量】按钮。4) 修改成员变量选择【成员变量】页面,在【成员变量】列表框中选中变量,单击【编辑代码】按钮。12. 【方法】选择【方法】选项卡可以允许添加、删除或搜索一个方法以及转到方法的定义或方法的声明。1) 添加方法选择【方法】页面,单击【添加方法】按钮,然后在【添加方法】对话框中指定值,如图3.28所示。


    图3.28【添加方法】对话框

    (1) 【返回类型】设置要添加的成员函数的返回类型。可以提供自己的返回类型,或从可用类型列表中选择。(2) 【函数名称】设置要添加的成员函数的名称。(3) 【参数类型】如果要添加的成员函数有参数,设置该函数的参数类型。可以提供自己的参数类型,或从可用类型列表中选择。(4) 【参数名称】如果要添加的成员函数有参数,设置该函数的参数名。(5) 【参数列表】显示已经添加到成员函数的参数列表。若要向该列表添加参数,在【参数类型】和【参数名称】框中提供类型和名称并单击【添加】按钮。若要从该列表中移除某个参数,选择该参数并单击【移除】按钮。(6) 【访问】设置对成员函数的访问的关键字。可以为public(公有的)、protected(保护的)、private(私有的)。默认情况下,成员函数的访问级别设置为public。(7) 【静态】、【虚拟】、【常量】和【内联】设置新成员函数是静态的还是虚拟、常量或内联函数。(8) 【注释】提供成员函数的注释。(9) 【函数签名】显示单击【完成】按钮时成员函数出现在代码中的样子,无法编辑此框中的文本。2) 删除方法在【方法】列表中选择一个选项,然后单击【删除方法】按钮。3) 显示方法的定义代码在【方法】列表中选择一个选项,然后单击【转到定义】按钮,或双击【方法】列表中的选项。4) 显示方法的声明代码在【方法】列表中选择一个选项,然后单击【转到声明】按钮。3.2.4类的添加与删除1. 类的添加
    单击【项目】→【添加类】菜单,或在【解决方案资源管理器】或【类视图】中右击该项目,单击【添加】→【类】菜单,此时会打开【添加类】对话框,如图3.29所示。


    图3.29【添加类】对话框

    在【添加类】对话框中,当在左侧窗口中展开Visual C 节点时,将会显示多组已安装的模板。这些组包括CLR、ATL、MFC和C 。如果选择某个组,则将在中间窗口中显示该组中可用模板的列表。每个模板都包含某个类所需的文件和源代码。若要生成新的MFC类,在中间窗口内选择【MFC类】,然后单击【添加】按钮。此时会打开【MFC添加类向导】,这样就可为该类指定选项。2. 【MFC添加类向导】对话框将类添加到现有的MFC项目,或将类添加到支持MFC的ATL项目,也可以将MFC类添加到具有MFC支持的Win32项目中。创建项目时指定的功能决定此对话框中的可用选项,如图3.30所示。一般情况下只需要输入类名,选择一个基类即可,其他选项可以用默认值。


    图3.30MFC添加类向导

    1) 【类名】指定新类的名称,C 类通常以“C”开头。2) 【基类】指定新类的基类名称,默认情况下,基类为CWnd。



    图3.31类的删除

    3.2.5MFC类案例编写一个基于对话框的密码程序,要求添加相关控件并实现如下的功能: 根据输入的密码信息,弹出相应的消息框,如果密码和用户名正确输出“欢迎您”消息框,如果密码或用户名不正确输出“用户名或密码错误,重新输入!”的消息框,要求密码信息显示为“*”。运行效果如图3.32所示。


    图3.32运行效果

    步骤: 1. 新建一个基于对话框的应用程序1) 启动【应用程序向导】新建项目打开Visual Studio 2010开发环境主窗口,单击【文件】→【新建】→【项目】菜单,如图3.33所示。


    图3.33新建项目



    图3.34【新建项目】对话框
    3) 【欢迎使用MFC应用程序向导】对话框单击【下一步】按钮,如图3.35所示。


    图3.35【欢迎使用MFC应用程序向导】对话框

    4) 【应用程序类型】对话框【应用程序类型】选择【基于对话框】,【项目类型】选择【MFC标准】,将【使用Unicode库】选项去掉,单击【完成】按钮,如图3.36所示。

    图3.36【应用程序类型】对话框
    2. 在对话框中添加控件删除对话框上原有的【TODO:在此放置对话框控件】静态文本控件、【确定】和【取消】按钮控件。分别添加两个静态文本,两个编辑框和一个命令按钮。3. 修改控件的属性在中间的编辑窗口中的IDD_PASSWORD_DIALOG对话框上单击鼠标右键,然后在右键菜单中选择【属性】命令,在打开的【属性】窗口中修改其Caption属性为“输入密码”,如图3.37所示。鼠标右键单击IDC_STATIC2控件,在弹出的菜单中选择【属性】命令,在【属性】窗口中,设置Caption属性为“用户名: ”。用类似的方法设置其他控件的属性,如表3.6所示。设置后的效果如图3.38所示。


    图3.37设置对话框属性



    表3.6控件属性





    控件名字(NAME)控 件 属 性属性值
    对话框IDD_PASSWORD_DIALOGCaption输入密码静态文本IDC_STATIC2Caption用户名: 静态文本IDC_STATIC3Caption密码: 命令按钮IDC_BUTTON1Caption确定编辑框IDC_EDIT2PasswordTrue


    图3.38设置后的效果
    4. 添加控件的成员变量分别用【成员变量向导】和【类向导】方法为控件添加如表3.7所示的成员变量。


    表3.7成员变量表


    控件ID类别变 量 类 型变量名
    IDC_EDIT1ValueCStringm_userIDC_EDIT2ValueCStringm_pass

    1) 用【成员变量向导】方法为IDC_EDIT1定义关联变量名为“m_user”鼠标右击IDC_EDIT1控件,在弹出的菜单中单击【添加变量】菜单,打开【添加成员变量向导】对话框,在【变量名】编辑框中输入“m_user”,其他选项保持默认值不变,如图3.39所示。


    图3.39添加成员变量向导

    2) 用【类向导】方法为IDC_EDIT2定义关联变量名为“m_pass”(1) 单击【项目】→【类向导】菜单。在MFC类向导对话框中,类名选择CPasswordDlg,选择【成员变量】选项卡页面,在【成员变量】列表中,选择IDC_EDIT2,单击【添加变量】按钮,如图3.40所示。(2) 在【添加成员变量】对话框中,【成员变量名称】项输入“m_pass”,【类别】项选择Value,【变量类型】选择CString,【字符数】输入“6”,单击【确定】按钮,如图3.41所示。


    图3.40【MFC类向导】对话框




    图3.41【添加成员变量】对话框

    5. 添加成员函数在【类视图】中鼠标右击CPasswordDlg,在弹出的菜单中单击【添加】→【添加函数】菜单,如图3.42所示。在【添加成员函数向导】对话框中,【返回类型】选择bool,【参数类型】选择int,【访问】选择public,【函数名】输入“emp”。单击【完成】按钮,如图3.43所示。


    图3.42添加成员函数



    图3.43添加成员函数向导

    在生成的emp函数中添加如下代码。


    BoolCPasswordDlg::emp(void)
    {


    UpdateData(TRUE);
    if(m_user.IsEmpty())//判断是否为空
    {
    MessageBox("用户名不能为空,重新输入!");
    return true;
    }
    return false;
    }


    MessageBox函数显示一个消息框,消息框中显示的文字是函数后括号中的文字。当程序进行交换数据时,需要调用UpdateData函数。UpdateData函数原形如下:
    BOOL UpdateData( BOOL bSaveAndValidate = TRUE);

    该函数只有一个布尔型参数bSaveAndValidate,它决定了数据传送的方向。若参数值为TRUE,即调用UpdateData(TRUE),表示将数据从控件中传送到对应的数据成员中; 若参数值为FALSE,即调用UpdateData(FALSE),则表示将数据从数据成员中传送给对应的控件。6. 编写程序代码双击IDC_BUTTON1命令按钮,在voidCPasswordDlg::OnBnClickedButton1()函数中的“//TODO: 在此添加控件通知处理程序代码”后填写如下代码。

    voidCPasswordDlg::OnBnClickedButton1()
    {
    //TODO: 在此添加控件通知处理程序代码


    if(emp()==true)return;
    UpdateData(TRUE);
    if(m_user=="莉莉" && m_pass=="123456") MessageBox("欢迎您!");
    else
    {
    MessageBox("用户名或密码错误,重新输入!");
    m_user="";m_pass="";
    }
    UpdateData(false);
    }


    7. 生成解决方案并运行单击【生成】→【生成解决方案】菜单或按F7键,单击【调试】→【开始执行】菜单或按Ctrl F5键。说明: VC 2010编写MFC程序的时候经常要用MessageBox函数,如果有提示“error C2664: "CWnd::MessageBoxW":不能将参数1从"const char []"转换为"LPCTSTR"”,错误提示的原因是VS2010默认使用的是UNICODE字符集,在参数转换时会出错。解决方法如下:方法1: 在新建项目时,把使用UNICODE字符集取消,如图3.44所示。


    图3.44MFC应用程序向导

    方法2: 单击【项目】→【属性】→【配置属性】→【常规】选项,把【字符集】改为【使用多字节字符集】,然后单击【确定】按钮,如图3.45所示。

    图3.45配置常规选项
    3.2.6对话框的数据交换机制成员变量存储了与控件相对应的数据。成员变量需要和控件交换数据,以完成输入或输出功能。例如,一个编辑框既可以用来输入,也可以用来输出。当用作输入时,用户在其中输入了数值之后,对应的数据成员应该更新与编辑框中的数值相同。当用作输出时,应及时刷新编辑框的内容以反映相应数据成员的变化。那么,对话框就需要一种机制来实现这种数据交换功能。MFC提供了类CDataExchange来实现对话框类与控件之间的数据交换(DDX),该类还提供了数据有效机制(DDV)。数据交换的工作由CDialog::DoDataExchange来完成。总结基于对话框的密码程序的数据交换过程,分别在头文件和实现文件中生成的代码如下。

    PasswordDlg.h : 头文件
    class CPasswordDlg : public CDialogEx
    {

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持
    public:

    CString m_user;
    CString m_pass;

    };
    PasswordDlg.cpp : 实现文件
    CPasswordDlg::CPasswordDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CPasswordDlg::IDD, pParent)
    ,
    m_user(_T(""))
    {



    m_pass = _T("");


    }
    void CPasswordDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialogEx::DoDataExchange(pDX);


    DDX_Text(pDX, IDC_EDIT1, m_user);
    DDX_Text(pDX, IDC_EDIT2, m_pass);
    DDV_MaxChars(pDX, m_pass, 6);
    }


    DoDataExchange函数只有一个参数,即一个CDataExchange对象的指针pDX。在该函数中调用了DDX函数来完成数据交换,调用DDV函数来进行数据有效检查。3.3消息和消息映射3.3.1消息及消息的分类
    Windows是基于消息驱动的,消息的传递与发送是Windows应用程序的核心所在,任何事件的触发与响应均要通过消息的作用才能得以完成。在SDK编程中,对消息的获取与分发主要是通过消息循环来完成的,而在MFC编程中则是通过采取消息映射的方式对其进行处理的。相比而言,这样的处理方式要简单许多,这也是符合面向对象编程中尽可能隐含实现细节的原则。Windows应用程序中的消息主要有以下三种类型。(1) Windows消息: 这类消息主要是指由WM_开头的消息(WM_COMMAND除外)。Windows消息往往带有参数,以标志处理消息的方法。(2) 控件的通知消息: 当控件的状态发生改变(例如用户在控件中进行输入)时,控件就会向其父窗口发送WM_COMMAND通知消息。(3) 命令消息: 命令消息主要包括由用户交互对象(菜单、工具条的按钮、快捷键等)发送的WM_COMMAND通知消息。消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键的消息。CWnd的派生类都可以接收到Windows消息、通知消息和命令消息。命令消息还可以由文档类等接收。3.3.2MFC常用消息及其消息映射函数1. 键盘消息
    当用户在键盘上按下某个键的时候,会产生WM_KEYDOWN消息,释放按键的时候又会产生WM_KEYUP消息,所以WM_KEYDOWN与WM_KEYUP消息一般总是成对出现的,WM_CHAR消息,是在用户的键盘输入能产生有效的ASCII码时才会发生。要注意前两个消息与WM_CHAR消息在使用上是有区别的。在前两个消息中,伴随消息传递的是按键的虚拟键码,所谓虚拟键代码,是指与设备无关的键盘编码,所以这两个消息可以处理非打印字符,如方向键、功能键等。而伴随WM_CHAR消息的参数是所按的键的ASCII码,ASCII码是可以区分字母的大小写的,而虚拟键码是不能区分大小写的。三种消息原型分别如下。MFC类向导能自动添加当前类的WM_KEYDOWN、WM_KEYUP和WM_CHAR消息处理函数,函数原型如下。


    afx_msg void OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags);
    afx_msg void OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags);
    afx_msg是MFC用于定义消息函数的标志,参数nChar表示虚拟键代码,nRepCnt表示当用户按住一个键时的重复计数,nFlags表示击键消息标志。
    afx_msg void OnChar(UINT nChar,UINT nRepCnt,UINT nFlags);
    参数nChar表示键的ASCII码,nRepCnt表示当用户按住一个键时的重复计数,nFlags表示字符消息标志。2. 鼠标消息当用户对鼠标进行操作时,只要鼠标移过窗口的客户区时,就会向该窗口发送WM_MOUSEMOVE(移动鼠标)消息。客户区是指窗口中用于输出文档的区域。用户按下左键时发送WM_LBUTTONDOWN,当用户释放左键时发送WM_LBUTTONUP,用户双击左键时发送WM_LBUTTONDBCLICK,用户按下右键时发送WM_RBUTTONDOWN,用户释放右键时发送WM_RBUTTONUP,用户双击右键时发送WM_RBUTTONDBCLICK。函数原型如下。


    afx_msg void OnMouseMove(UINT nFlags,CPoint point);
    afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
    afx_msg void OnLButtonUp(UINT nFlags,CPoint point);
    afx_msg void OnLButtonDblClk(UINT nFlags,CPoint point);
    afx_msg void OnRButtonDown(UINT nFlags,CPoint point);
    afx_msg void OnRButtonUp(UINT nFlags,CPoint point);
    afx_msg void OnRButtonDblClk(UINT nFlags,CPoint point);

    其中,point表示鼠标光标在屏幕上的(x,y)坐标,nFlags表示鼠标按键和键盘组合情况,它可以是下列值的组合(MK前缀表示“鼠标键”)。MK_CONTROL——键盘上的Ctrl键被按下; MK_LBUTTON——鼠标左键被按下; MK_MBUTTON——鼠标中键被按下; MK_RBUTTON——鼠标右键被按下; MK_SHIFT——键盘上的Shift键被按下。3. 计时器消息应用程序是通过CWnd的SetTimer函数来设置并启动计时器的,这个函数的原型如下:

    UINT_PTR SetTimer( UINT_PTR nIDEvent, UINT nElapse, void (CALLBACK* lpfnTimer)(HWND, UINT, UINT_PTR, DWORD));
    参数nIDEvent用来指定该计时器的标识值(不能为0),当应用程序需要多个计时器时可多次调用该函数,但每一个计时器的标识值应是的。nElapse表示计时器的时间间隔(单位为ms)。lpfnTimer是一个回调函数的指针,该函数由应用程序来定义,用来处理计时器WM_TIMER消息。一般情况下该参数为NULL,此时WM_TIMER消息被放入到应用程序消息队列中供CWnd对象处理。SetTimer函数成功调用后返回新计时器的标识值。当应用程序不再使用计时器时,可调用CWnd的KillTimer函数来停止WM_TIMER消息的传送,函数原型如下:


    BOOL KillTimer(int nIDEvent);
    其中,nIDEvent和用户调用SetTimer函数设置的计时器标识值是一致的。对于WM_TIMER消息,类向导会将其映射成具有下列原型的消息处理函数:


    afx_msg voidOnTimer(UINT nIDEvent);
    通过nIDEvent可判断出WM_TIMER是哪个计时器传送的。4. 窗口消息创建一个窗口对象的时候,这个窗口对象在创建过程中收到的就是WM_CREATE消息,对这个消息的处理过程一般用来设置一些显示窗口前的初始化工作,如设置窗口的大小、背景颜色等。WM_DESTROY消息指示窗口即将要被撤销,在这个消息处理过程中,可以做窗口撤销前的一些工作。WM_CLOSE消息发生在窗口将要被关闭之前,在收到这个消息后,一般性的操作是回收所有分配给这个窗口的各种资源。而当窗口工作区中的内容需要重画的时候就会产生WM_PAINT消息。函数原型如下:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
    lpCreateStruct: 包括被创建窗口的信息。


    afx_msg void OnDestroy();
    afx_msg void OnClose();
    afx_msg void OnPaint();
    5. 焦点消息当一个窗口从非活动状态变为具有输入焦点的活动状态的时候,它就会收到WM_SETFOCUS消息,而当一个窗口失去输入焦点变为非活动状态的时候它就会收到WM_KILLFOCUS消息。函数原型如下:
    afx_msg void OnSetFocus(CWnd*pOldWnd);
    afx_msg void OnKillFocus(CWnd*pNewWnd);
    pOldWnd: 指向失去输入焦点的窗口。pNewWnd: 指向接收输入焦点的窗口。3.3.3消息映射MFC使用一种消息映射机制来处理消息,在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。MFC在类中加入静态消息映射表的方式是通过DECLARE_MESSAGE_MAP()和BEGIN_MESSAGE_MAP()及END_MESSAGE_MAP()宏来实现的。1. 宏的说明1) DECLARE_MESSAGE_MAP在类的头文件(.h)中使用,在类声明的尾部,用于声明在源文件中存在的消息映射。2) BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()在类的实现文件(.cpp)中使用,分别标识消息映射的开始和消息映射的结束。一个完整的MFC消息映射包括对消息处理函数的原型声明、实现以及存在于消息映射中的消息入口,这几部分分别存在于类的头文件和实现文件中。一般情况下除了对自定义消息的响应外,对于标准Windows消息的映射处理可以借助类向导来完成。2. 一个完整的MFC消息映射过程(1) 在类的定义文件(.h)中DECLARE_MESSAGE_MAP()后添加消息处理函数的函数声明,注意要以afx_msg打头。(2) 在类的实现文件(.cpp)中的消息映射表中添加该消息的消息映射入口项。



    BEGIN_MESSAG_MAP

    消息映射入口项



    END_MESSAGE_MAP
    (3) 在类实现文件(.cpp)中添加消息处理函数的函数实现。3.3.4消息映射案例生成一个基于对话框的应用程序,完成在对话框中单击鼠标左键,弹出一个消息框显示“您好!”。运行结果如图3.46所示。


    图3.46运行结果




    图3.47MFC类向导

    4. 编写程序代码在【MFC类向导】对话框中,单击【编辑代码】按钮。在voidCHellodialogDlg::OnLButtonDown(UINT nFlags,CPoint point)函数中的“//TODO: 在此添加消息处理程序代码和/或调用默认值”语句后面添加以下程序代码。
    void CHellodialogDlg::OnLButtonDown(UINT nFlags,CPointpoint)
    {
    //TODO: 在此添加消息处理程序代码和/或调用默认值

    MessageBox("您好!");
    CDialogEx::OnLButtonDown(nFlags,point);
    }


    5. 生成解决方案并运行单击【生成】→【生成解决方案】菜单或按F7键,单击【调试】→【开始执行】菜单或按Ctrl F5键。
    这样就完成了一个消息映射过程。程序运行后,在窗口区单击鼠标左键,就会弹出一个消息对话框。查看CHellodialogDlg.cpp程序代码,可以发现: 类向导为WM_LBUTTOMDOWN的消息映射做了以下三个方面内容的改变。(1) 在头文件CHellodialogDlg.h中声明消息处理的函数OnLButtonDown。

    DECLARE_MESSAGE_MAP()
    public:


    afx_msgvoidOnLButtonDown(UINT nFlags,CPoint point);


    DECLARE_MESSAGE_MAP用于声明在源文件中存在的消息映射。(2) 在CHellodialogDlg.cpp源文件添加了相应的映射宏。


    BEGIN_MESSAGE_MAP(CHellodialogDlg,CDialogEx)



    ON_WM_LBUTTONDOWN()

    END_MESSAGE_MAP()


    BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()分别标识消息映射的开始和消息映射的结束。(3) 在CHellodialogDlg.cpp文件中添加一个空的消息处理函数,用户可以填入具体代码。



    void CHellodialogDlg::OnLButtonDown(UINT nFlags,CPoint point)
    {
    //TODO: 在此添加消息处理程序代码和/或调用默认值
    CDialogEx::OnLButtonDown(nFlags,point);
    }








    【书摘与插画】


    1. 开发环境人性化,开发操作简洁、方便,全中文版界面。2. 加入Windows Form应用程序部分。此部分采用C /CLI语法,在.Net Framework 4.0支持下工作,与其他面向对象编程环境相一致,上手快,开发速度也快。3. 保留MFC中常用的重点内容。用简洁明了的表现形式和典型例题来安排相对较多的教学内容,不求全面。简明易懂地把学生领入VC 的美妙殿堂,兴趣盎然,意犹未尽才是我们的目标。
    【内容简介】


    本书主要包括C 与面向对象、MFC应用程序、Windows Form应用程序等部分。C 与面向对象部分系统地介绍了基本C 语法和融入面向对象概念后的C 语言; MFC应用程序详细介绍了MFC编程基础知识、资源与对话框、控件、菜单与工具栏、文档与视图、图形与文本、数据库等内容; Windows Form应用程序部分从实例出发,主要介绍Windows Form基础知识、Windows Form控件及Windows Form环境下的绘图。理论内容后有与之配套的习题和上机实验指导,用以加深和巩固对理论内容的理解。 本书图文并茂,语言精练,例题典型,实用性、趣味性强,可作为大学本科、高职高专相关课程的教材,也可供广大Visual C 爱好者自学。另外,本书有配套的例题源代码和电子课件,供广大读者免费下载。
    【媒体评论】
    评论

    售后保障

    最近浏览

    猜你喜欢

    该商品在当前城市正在进行 促销

    注:参加抢购将不再享受其他优惠活动

    x
    您已成功将商品加入收藏夹

    查看我的收藏夹

    确定

    非常抱歉,您前期未参加预订活动,
    无法支付尾款哦!

    关闭

    抱歉,您暂无任性付资格

    此时为正式期SUPER会员专享抢购期,普通会员暂不可抢购