出版时间:2012-7 出版社:电子工业出版社 作者:孙鑫 页数:767 字数:1257000
Tag标签:无
前言
修 订 版 前 言从本书第1版面市,一晃6年过去了,作为一本技术图书,《VC++深入详解》的生命力让我惊叹,时至今日,该书仍畅销不衰。想当初在出版本书时,笔者还担心VC++图书看的人会不会很少啊 。6年时光,笔者见证了很多程序爱好者通过本书进入软件开发岗位,在给企业做培训时,经常有企业同行告诉笔者他是看着笔者的图书和视频成长的,这让笔者莫大的欣慰。本书成书说来也是偶然,当初录制了一套《VC++深入详解》视频,在网络上流传很广,很多VC++程序员都是通过学习该套视频而走上的软件开发岗位,然而由于视频不利于知识的复习和查找,因此很多读者来信希望能出一套纸质的教材,后来在博文视点公司郭立总编和余安萍的帮助下,最终本书得以面市。本书面市后,很多读者给予了本书极高的评价,将之和《深入浅出MFC》相提并论,甚至将笔者和侯捷老师等同,这让笔者诚惶诚恐。从技术角度上来说,笔者和侯捷老师相差甚远,从图书角度上来,本书对MFC的阐述部分仅仅是让读者快速入门,能快速应用于开发,深入地理解MFC框架的各种原理和设计思想,还需要进一步参看《深入浅出MFC》。读者一定要正确的对待本书,切不可因本书而产生C++编程不过如此的念头,那样实非此书之福,也非读者之福。C++编程领域浩瀚博大,本书只是把读者领入了C++开发的道路,前方的路还很远很长,衷心希望读者能够继续学习,继续成长,终有一天成长为C++领域的编程高手。本书读者对象本书读者群包括: 掌握了C语言,想进一步学习Windows编程的读者。 学习VC++多年,但始终没有真正入门的读者。 正在从事VC++开发的初级程序员。 有一定VC++开发经验,想要系统地学习VC++的读者。在本书的配套光盘中,提供了一套完整的VC++教学视频,以帮助读者更快、更好地掌握VC++编程。关于本书配套光盘的内容,请参见“本书的配套光盘说明”。本书的内容组织本书在内容的组织上循序渐进、由浅入深;在知识的介绍上,从内到外、从原理到实践。第1章帮助读者掌握Windows平台下程序运行的内部机制。第2章帮助读者复习C++中的重要知识,为后续知识的学习打下良好的基础。第3章重点剖析MFC框架程序的运行脉络,并与第1章的知识做对照,为读者彻底扫清学习MFC的迷雾。相信通过这章的学习,很多以前学过MFC的读者都会有一种恍然大悟的感觉。前三章可以归为基础部分,从第4章开始就是实际应用开发的讲解了,包括绘图、文本、菜单、对话框、定制程序外观、图形保存和重绘、文件和注册表操作、网络编程、多线程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题,并且每一章都有一个完整的例子。本书的讲解理论结合实际,选用的例子和代码具有相当的代表性和实用价值,我和我的学员曾经在实际开发项目的过程中就直接使用过很多书中的代码。本书的实例程序作者在编写本书时,使用的操作系统是Windows 2000 Service Pack 4,开发工具是VC++ 6.0 SP5,MSDN是2001年1月版的(提示:与VC++6.0匹配的MSDN截止到2001年10月版,之后的版本都与.NET匹配,可能与本书使用的版本有所不同,如果需要匹配VC++6.0的MSDN,可以通过百度(www.baidu.com)或者Google(www.google.com)搜索关键字“MSDN 2001”,进行下载)。本书所有的实例程序都在上述环境中运行正常。提示:由于QQ运行时占用了多个端口,可能与本书例子中的网络程序使用的端口冲突,在运行本书例子中的网络程序时,如果出错,请更换程序中的端口号,或者关闭QQ后再运行书中的程序。学习建议配套光盘提供的视频课数与本书的章数是一一对应的,建议读者先看视频,有一个初步印象后再看相应的章节,这样能够更快、更好地掌握VC++编程。在学习本书时,建议读者多动脑(想想为什么),多动手(将知识转换为自己的)。在理解的前提下,独立地编写出书中每章的例子程序,可以作为是否掌握本章内容的一个考核。由于作者的水平有限,错误和疏漏之处在所难免,欢迎广大技术专家和读者指正。作者的联系方式是csunxin@sina.com,读者也可以上作者的网站发表意见,网址是www.phome.asia和www.sunxin.org。致 谢 本书在编著过程中,赵岚岚、高莹、张素芳、瞿瑞强、张欣、张玲、窦建涛、涂君君、邵佳赜、马文勇参与编著,这里一并感谢。封面的漫画头像由王裕民绘制,在此表示感谢。作 者 2012年5月本书的配套光盘说明本书的配套光盘提供了两部分内容:本书所有实例的代码;VC++教学视频(Flash格式)。实例代码配套光盘中的实例代码是按照章节的顺序提供的,例如,第7章的例子程序位于光盘的Chapter7目录下。VC++教学视频本套教学视频由作者本人录制,为了帮助读者更好地掌握VC++开发,作者花费了大量的时间和精力将AVI格式的视频转换为Flash格式,免费提供给读者使用,希望读者能够从中受益。这套视频的内容简介如下所示。Lesson1:Windows程序运行原理及程序编写流程,窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与cdecl调用规范的比较,初学者常犯错误及注意事项。Lesson2:C++经典语法与应用,类的编写与应用,构造与析构函数,函数的重载,类的继承,函数覆盖,基类与派生类的构造函数、析构函数调用顺序,如何在派生类构造函数中向基类的构造函数传递参数,this成员变量,类型转换的内幕,虚拟函数与多态性,引用和指针变量的区别与共同处。VC工程的编译原理与过程,将工程中不同的类拆分到不同的文件中,每一个类由一个.h和.cpp文件共同完成,头文件重复定义问题的解决,培养了学员良好的编程习惯,也为以后分析MFC AppWizard生成的工程奠定良好基础。Lesson3:讲述MFC AppWizard的原理与MFC程序框架的剖析。AppWizard是一个源代码生成工具,是计算机辅助程序设计工具,WinMain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate两个函数的着重分析,Windows窗口与C++中的CWnd类的关系。Lesson4:MFC消息映射机制的剖析,讲述如何运用ClassWizard,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。如何设置封闭图形的填充刷子(位图画刷与透明画刷的使用)。Lesson5:掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对CString类的使用。通过对卡拉OK程序的编写,讲解定时器的使用和DrawText函数的巧妙运用,讲解如何使用CDC的裁减功能。Lesson6:菜单的工作原理及编写应用,菜单命令消息在MFC框架程序的几个类中的传递顺序和处理过程。标记菜单、默认菜单的实现原理、图形菜单的实现及常犯错误的分析,GetSystemMetrics的应用,弹出快捷菜单的实现方式及其命令响应函数有效范围(与弹出菜单时所指定的父窗口有密切的关系,最底层的子窗口具有最优先的处理机会)。动态菜单的编写,如何让程序在运行时产生新的菜单项及如何手工为这些新产生的菜单命令安排处理函数,如何在顶层窗口中截获对菜单命令的处理,更进一步掌握CString类的应用。Lesson7:对话框用户界面程序的编写,如何向对话框控件关联数据成员及其实现机理,如何利用对话框类的成员函数向控件发送消息和获取对话框控件的类指针,如何直接利用对话框控件类操纵对话框控件(发送消息和直接调用成员函数),如何在程序运行时产生和销毁控件。对话框控件的几种操作方式的优劣比较分析。如何实现对话框的部分收缩和展开。如何让对话框上的文本框在程序启动后立即获得焦点,如何利用SetWindowLong改变窗口的回调函数,通过改变文本框的默认回车处理方式进行演示。实现多个输入文本框间通过回车逐一向下传递焦点的另一种巧妙方法(用默认按钮来处理)。Lesson8:逃跑按钮的巧妙实现。如何制作属性页对话框和向导对话框,融合讲解组合框(如何调整组合框的大小)、列表框、单选按钮、复选按钮等常用对话框控件的多种使用方法。如何限制用户在不满足设定的条件时切换到其他属性页和向导页。Lesson9:如何修改MFC AppWizard向导生成的框架程序的外观和大小,修改图标、光标、背景的三种方法。如何增加和删除工具栏按钮,如何给应用程序增加工具栏,如何显示和隐藏工具栏。定制状态栏,在状态栏中添加时钟显示,CTime类及其用法。在状态栏中添加进度条(主窗口产生后立即产生进度条的巧妙思想,不能在OnCreate函数中直接处理,要用到自定义消息的方法)。鼠标坐标显示,在CView中获取状态栏对象的几种方式。如何为应用程序添加启动画面。Lesson10:图形的绘制,如何使用自定义画笔(颜色,线宽,线型)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,对按钮控件的特殊处理。如何在窗口中显示一幅位图。Lesson11:如何让CDC上输出的文字、图形具有保持功能,集合类CPtrArray的使用,CPaintDC与CClientDC的区别与应用,OnPa
内容概要
从实际应用入手,由浅入深、循序渐进地讲述Windows程序内部运行机制、MFC框架、文本、菜单、对话框、文件操作、网络编程、进程间通信、ActiveX控件、动态链接库、HOOK编程等多个主题。全书还贯穿作者多年来学习编程的一些经验,以及一些学习方法的建议,为读者进一步的学习提供指导。
本书不同于一般的讲述VC++使用的书籍,本书主要从程序内部运行的机制和MFC程序的组织脉络入手,使读者在学习VC++编程知识时,既能够知其然,又能知其所以然,从而帮助读者从根本上理解和掌握Windows的程序设计。
本书的配套光盘还免费提供近45小时的VC++教学视频,读者在学习的过程中可以将视频和书互为参考,配合学习,这样可以更快、更好地掌握VC++编程。
书籍目录
第1章 Windows程序内部运行机制
1.1 API与SDK
1.2 窗口与句柄
1.3 消息与消息队列
1.4 WinMain函数
1.4.1 WinMain函数的定义
1.4.2 窗口的创建
1.4.3 消息循环
1.4.4 编写窗口过程函数
1.5 动手写第一个Windows程序
1.6 消息循环的错误分析
1.7 变量的命名约定
1.8 小结
第2章 掌握C++
2.1 从结构到类
2.1.1 结构体的定义
2.1.2 结构体与类
2.2 C++的特性
2.2.1 类与对象
2.2.2 构造函数
2.2.3 析构函数
2.2.4 函数的重载
2.2.5 this指针
2.2.6 类的继承
2.2.7 虚函数与多态性、
2.2.7 纯虚函数
2.2.8 函数的覆盖和隐藏
2.2.9 引用
2.2.10 C++类的设计习惯及头文件
2.2.10 重复包含问题的解决
2.2.11 VC++程序编译链接的
2.2.11 原理与过程
第3章 MFC框架程序剖析
3.1 MFC AppWizard
3.2 基于MFC的程序框架剖析
3.2.1 MFC程序中的
3.2.1 WinMain函数
3.2.2 MFC框架窗口
3.2.3 消息循环
3.2.4 窗口过程函数
3.2.5 文档/视类结构
3.2.6 帮助对话框类
3.3 窗口类、窗口类对象与窗口
3.3.1 三者之间关系
3.3.2 在窗口中显示按钮
3.4 本章小结
第4章 简单绘图
4.1 MFC消息映射机制
4.1.1 ClassWizard
4.1.2 消息映射机制
4.2 绘制线条
4.2.1 利用SDK全局函数实现
4.2.4 画线功能
4.2.2 利用MFC的CDC类实现
4.2.4 画线功能
4.2.3 利用MFC的CClientDC类
4.2.4 实现画线功能
4.2.4 利用MFC的CWindowDC类
4.2.4 实现画线功能
4.2.5 在桌面窗口中画线
4.2.6 绘制彩色线条
4.3 使用画刷绘图
4.3.1 简单画刷
4.3.2 位图画刷
4.3.3 透明画刷
4.4 绘制连续线条
4.5 绘制扇形效果的线条
第5章 文本编程
5.1 插入符
5.1.1 创建文本插入符
5.1.2 创建图形插入符
5.2 窗口重绘
5.2.1 OnDraw函数
5.2.2 添加字符串资源
5.3 路径
5.4 字符输入
5.4.1 设置字体
5.4.2 字幕变色功能的实现
5.5 本章小结
第6章 菜单
6.1 菜单命令响应函数
6.2 菜单命令的路由
6.2.1 程序类对菜单命令的
4.2.4 响应顺序
6.2.2 Windows消息的分类
6.2.3 菜单命令的路由
6.3 基本菜单操作
6.3.1 标记菜单
6.3.2 默认菜单项
6.3.3 图形标记菜单
6.3.4 禁用菜单项
6.3.5 移除和装载菜单
6.3.6 MFC菜单命令更新机制
6.3.7 快捷菜单
6.4 动态菜单操作
6.4.1 添加菜单项目
6.4.2 插入菜单项目
6.4.3 删除菜单
6.4.4 动态添加的菜单项的
6.4.4 命令响应
6.5 电话本示例程序
6.5.1 动态添加子菜单的实现
6.5.2 显示输入的字符
6.5.3 添加菜单项及其命令
6.5.3 响应函数
6.5.4 框架类窗口截获菜单
6.5.3 命令消息
6.6 本章小结
第7章 对话框(一)
7.1 对话框基本知识
7.1.1 常用控件介绍
7.1.2 对话框的种类
7.2 对话框的创建和显示
7.2.1 模态对话框的创建
7.2.2 非模态对话框的创建
7.3 动态创建按钮
7.4 控件的访问
7.4.1 控件的调整
7.4.2 静态文本控件
7.4.3 编辑框控件
7.5 对话框伸缩功能的实现
7.6 输入焦点的传递
7.7 默认按钮的进一步说明
7.8 本章小结
第8章 对话框(二)
8.1 “逃跑”按钮的实现
8.2 属性表单和向导的创建
8.2.1 创建属性页
8.2.2 创建属性表单
8.2.3 向导的创建
8.3 本章小结
附录
第9章 定制应用程序外观
9.1 修改应用程序窗口的
9.1 外观
9.1.1 在窗口创建之前修改
9.1.2 在窗口创建之后修改
9.2 修改窗口的光标、
9.2 图标和背景
9.2.1 在窗口创建之前修改
9.2.2 在窗口创建之后修改
9.3 模拟动画图标
9.3.1 加载图标资源
9.3.2 定时器的处理
9.4 工具栏编程
9.4.1 在工具栏上添加和
9.4.1 删除按钮
9.4.2 创建工具栏
9.5 状态栏编程
9.6 进度栏编程
9.6.1 在窗口中创建进度栏
9.6.2 在状态栏的窗格中创建
9.6.2 进度栏
9.7 在状态栏上显示鼠标
9.7 当前位置
9.8 启动画面
9.9 本章小结
第10章 绘图控制
10.1 简单绘图
10.2 设置对话框
10.2.1 设置线宽
10.2.2 设置线型
10.3 颜色对话框
10.4 字体对话框
10.5 示例对话框
10.6 改变对话框和控件的背景及
10.6 文本颜色
10.6.1 改变整个对话框及其上子
10.6.1 控件的背景色
10.6.2 仅改变某个子控件的背景
10.6.1 及文本颜色
10.6.3 改变控件上的文本字体
10.6.4 改变按钮控件的背景色
10.6.1 及文本颜色
10.7 位图的显示
10.8 本章小结
第11章 图形的保存和重绘
11.1 坐标空间和转换
11.1.1 坐标空间
11.1.2 转换
11.1.3 逻辑坐标和设备坐标
11.2 图形的保存和重绘
11.2.1 集合类CPtrArray
11.2.2 OnPaint与OnDraw
11.3 窗口滚动功能的实现
11.3.1 CScrollView类
11.3.2 图形错位现象
11.4 元文件
11.4.1 元文件的使用
11.4.2 元文件的保存
11.4.2 与打开
11.5 兼容设备描述表
11.6 本章小结
第12章 文件和注册表操作
12.1 const char*和char* const
12.1.1 const char*
12.1.2 char* const
12.2 C语言对文件操作的支持
12.2.1 文件的打开
12.2.2 文件的写入
12.2.3 文件的关闭
12.2.4 fflush函数
12.2.5 文件指针定位
12.2.6 文件的读取
12.2.7 二进制文件和文本文件
12.2.8 文本方式和二进制方式
12.3 C++对文件操作的支持
12.4 Win32 API对文件操作
12.4 的支持
12.4.1 文件的创建和打开
12.4.2 文件的写入
12.4.3 文件的读取
12.5 MFC对文件操作的支持
12.5.1 文件的写入
12.5.2 文件的读取
12.5.3 CFileDialog类
12.6 Win.ini文件的访问
12.6.1 Win.ini文件的结构
12.6.2 Win.ini文件的写入
12.6.3 Win.ini文件的读取
12.7 注册表的编程
12.7.1 注册表API
12.7.2 注册表访问示例
12.8 本章小结
第13章 文档与串行化
13.1 使用CArchive类对文件
13.1 进行读写操作
13.2 MFC框架程序提供的文件
13.2 新建功能
13.2.1 IDR_MAINFRAME
13.2.1 字符串资源
13.2.2 OnNewDocument函数的
13.2.2 调用过程
13.3 文档串行化
13.3.1 文档类的Serialize函数
13.3.2 MFC框架对Serialize
13.3.2 函数的调用过程
13.4 可串行化的类
13.4.1 实现类对串行化的支持
13.4.2 利用可串行化类的Serialize
13.4.2 函数保存和加载对象
13.4.3 版本号
13.4.4 利用CObArray类对串行化
13.4.4 的支持保存和加载数据
13.5 文档对象数据的销毁
13.6 本章小结
第14章 网络编程
14.1 计算机网络基本知识
14.1.1 IP地址
14.1.2 协议
14.1.3 网络的状况
14.1.4 网络异质性问题的解决
14.1.5 ISO/OSI七层参考模型
14.1.6 数据封装
14.1.7 TCP/IP模型
14.1.8 端口
14.1.9 套接字(socket)的引入
14.1.10 网络字节顺序
14.1.11 客户机/服务器模式
14.2 Windows Sockets的实现
14.2.1 套接字的类型
14.2.2 基于TCP(面向连接)
14.2.2 的socket编程
14.2.3 基于UDP(面向无连接)
14.2.2 的socket编程
14.3 相关函数
14.3.1 WSAStartup函数
14.3.2 socket函数
14.3.3 bind函数
14.3.4 inet_addr和inet_ntoa函数
14.3.5 listen函数
14.3.6 accept函数
14.3.7 send函数
14.3.8 recv函数
14.3.9 connect
14.3.10 recvfrom
14.3.11 sendto函数
14.3.12 htons和htonl函数
14.4 基于TCP的网络应用程序
14.4 的编写
14.4.1 服务器端程序
14.4.2 客户端程序
14.5 基于UDP的网络应用程序
14.5 的编写
14.5.1 服务器端程序
14.5.2 客户端程序
14.6 基于UDP的简单聊天程序
14.6.1 服务器端程序
14.6.2 客户端程序
14.7 本章小结
第15章 多线程
15.1 基本概念
15.1.1 进程
15.1.2 线程
15.2 线程创建函数
15.3 简单多线程示例
15.4 线程同步
15.4.1 火车站售票系统模拟程序
15.4.2 多线程程序容易出现的问题
15.4.3 利用互斥对象实现线程同步
15.5 保证应用程序只有一个
15.5 实例运行
15.6 网络聊天室程序的实现
15.6.1 加载套接字库
15.6.2 创建并初始化套接字
15.6.3 实现接收端功能
15.6.4 实现发送端功能
15.7 本章小结
第16章 线程同步与异步
第16章 套接字编程
16.1 事件对象
16.1.1 创建事件对象
16.1.2 设置事件对象状态
16.1.3 重置事件对象状态
16.1.4 利用事件对象实现线程同步
16.1.5 保证应用程序只有一个
16.1.5 实例运行
16.2 关键代码段
16.2.1 相关的API函数
16.2.2 利用关键代码段实现
16.2.2 线程同步
16.3 线程死锁
16.4 互斥对象、事件对象与
16.4 关键代码段的比较
16.5 基于消息的异步套接字
16.5.1 相关函数说明
16.5.2 网络聊天室程序的实现
16.6 本章小结
第17章 进程间通信
17.1 剪贴板
17.1.1 数据发送
17.1.2 数据接收
17.2 匿名管道
17.2.1 基础知识
17.2.2 进程的创建
17.2.3 父进程的实现
17.2.4 子进程的实现
17.3 命名管道
17.3.1 基础知识
17.3.2 服务器端程序
17.3.3 客户端程序
17.4 邮槽
17.4.1 服务器端程序
17.4.2 客户端程序
17.5 本章小结
第18章 ActiveX控件
18.1 ActiveX控件
18.1.1 ActiveX控件的好处
18.1.2 MFC ActiveX
18.1.2 ControlWizard
18.1.3 ActiveX控件的测试
18.1.4 ActiveX控件的注册
18.1.5 时钟控件的实现
18.2 属性
18.2.1 标准属性
18.2.2 自定义属性
18.3 方法
18.4 事件
18.4.1 标准事件
18.4.2 自定义事件
18.5 属性的持久性
18.6 环境属性
18.7 ActiveX控件测试程序
18.8 本章小结
18.9 问题
第19章 动态链接库
19.1 动态链接库概述
19.1.1 静态库和动态库
19.1.2 使用动态链接库的好处
19.1.3 动态链接库的加载
19.2 Win32 DLL的创建和使用
19.2.1 Dumpbin命令
19.2.2 从DLL中导出函数
19.3 隐式链接方式加载DLL
19.3.1 利用extern声明
19.3.1 外部函数
19.3.2 Depends工具
19.3.3 利用_declspec(dllimport)
19.3.3 声明外部函数
19.4 完善Win32 DLL例子
19.5 从DLL中导出C++类
19.6 解决名字改编问题
19.7 显示加载方式加载DLL
19.7.1 LoadLibary函数
19.7.2 调用约定
19.7.3 根据序号访问DLL中的
19.7.3 导出函数
19.8 DllMain函数
19.9 MFC DLL
19.10 本章小结
第20章 HOOK和数据库访问
20.1 HOOK编程
20.1.1 基本知识
20.1.2 进程内钩子
20.1.3 全局钩子
20.2 数据库访问技术
20.3 在VB中利用ADO访问
20.3 数据库
20.3.1 利用ADO控件访问
20.3.1 数据库
20.3.2 利用ADO对象访问
20.3.1 数据库
20.4 在VC中利用ADO访问
20.4 数据库
20.5 本章小结
章节摘录
第26行,调用TextOut函数在(0,0)的位置输出一个网址。当发生重绘时,窗口中的文字和图形都会被擦除。在擦除背景后,TextOut函数又一次执行,在窗口中再次绘制出。这个过程对用户来说是透明的,用户并不知道程序执行的过程,给用户的感觉就是你在响应WM_PAINT消息的代码中输出的文字或图形始终保持在窗口中。换句话说,如果我们想要让某个图形始终在窗口中显示,就应该将图形的绘制操作放到响应WM_PAINT消息的代码中。 那么系统为什么不直接保存窗口中的图形数据,而要由应用程序不断地进行重绘呢?这主要是因为在图形环境中涉及的数据量太大,为了节省内存的使用,提高效率,而采用了重绘的方式。 在响应WM_PAINT消息的代码中,要得到窗口的DC,必须调用BeginPaint函数。BeginPaint函数也只能在WM_PAINT消息的响应代码中使用,在其他地方,只能使用GetDC来得到DC的句柄。另外,BeginPaint函数得到的DC,必须用EndPaint函数去释放。 29~34行代码:当用户单击窗口上的关闭按钮时,系统将给应用程序发送一条WM_CLOSE消息。在这段消息响应代码中,我们首先弹出一个消息框,让用户确认是否结束。如果用户选择“否”,则什么也不做;如果用户选择“是”,则调用DestroyWindow函数销毁窗口,DestroyWindow函数在销毁窗口后会向窗口过程发送WM_DESTROY消息。注意,此时窗口虽然销毁了,但应用程序并没有退出。有不少初学者错误地在WM_DESTROY消息的响应代码中,提示用户是否退出,而此时窗口已经销毁了,即使用户选择不退出,也没有什么意义了。所以如果你要控制程序是否退出,应该在WM_CLOSE消息的响应代码中完成。 ……
图书封面
图书标签Tags
无
评论、评分、阅读与下载