第一章 Visual Studio开发环境 1
1.1 使用Visual C++编程要掌握哪些知识 1
1.2 Visual C++.NET增加了哪些新特性 1
1.3 Visual Studio.NET集成开发环境的新改进 20
1.4 MFC与SDK之间的关系 23
1.5 关于Visual C++环境中文件的保存 24
1.6 在工程中增加自定义类的问题 24
2.3 怎样去掉程序窗口标题上 无标题 字样或者活动的文档名 25
2.2 怎样改变MFC应用程序向导生成的窗口风格 25
2.1 如何通过代码获得应用程序主窗口的指针 25
第二章 应用程序框架 25
2.4 怎样防止MFC在窗口标题栏上把文档名预置成应用程序名 26
2.5 在文档改变时怎样为窗口标题显示一个 * 号 27
2.6 如何改变窗口标题的内容 27
2.7 怎样在程序运行时改变窗口标题 28
2.8 如何改变窗口的图标 28
2.9 最高窗口的实现 29
2.10 运行时怎样使程序处于最前面 29
2.14 如何单击除了窗口标题栏以外的区域使窗口移动 31
2.13 如何重置窗口的大小 31
2.12 如何移动窗口 31
2.11 如何得到子窗口在主窗口中的相对坐标 31
2.15 如何修改应用程序窗口的初始化尺寸 32
2.16 窗口最大化、最小化的实现 33
2.17 如何在程序中将其他窗口程序调至前台 34
2.18 为什么把 delete this 放在PostNcDestroy()函数中 35
2.19 为什么需要使用GetSafeHwnd()函数 35
2.20 CWnd::Create()函数中的nID是什么 36
2.21 如何使用消息改变窗口的图标 36
2.22 如何使程序保持极小状态 36
2.23 如何创建多边形窗口 37
2.24 怎样定制窗口最小化后的显示效果 38
2.25 怎样改变程序主窗口的背景色 38
2.26 怎样使程序主窗口的最大和最小尺寸得到控制 39
2.27 如何改变窗口显示的字体 40
第三章 文档/视图结构 43
3.1 Visual C++应用框架的文档操作内幕 43
3.2 怎样使程序启动时自动打开上次的文档 45
3.3 如何使多文档界面应用程序在刚启动时不建立一个新文件 46
3.4 怎样使程序在启动时不创建一个空的新文档 46
3.7 如何检测文档的类型 47
3.6 如何只存储文档的某一部分 47
3.5 CArchive类在磁盘中写入了什么 47
3.8 串行化中的数据类型问题 48
3.9 串行化与版本的问题 48
3.10 如何以不同的格式保存文件 49
3.11 如何使用MRU(最近使用的)文件 50
3.12 关于文档内容的更新 50
3.13 怎样得到当前的文档和视图指针 51
3.14 怎样才能在应用程序中循环浏览已经打开的文档 51
3.15 如何设置视图类的空背景画刷 51
3.16 怎样改变视图的背景 52
3.17 怎样为CForm View中的所有控件设置Tooltips 53
3.18 如何创建一个不带滚动条的CEditView 55
3.19 如何在CForm View中加入上下文帮助 55
3.20 视图的不活动性如何处理 56
3.21 怎样在多文档界面应用程序中得到所有的视图 56
3.22 如何切分视图窗口 56
3.23 如何在视图运行时建立控件 58
3.24 如何在窗口中切换视图 59
3.25 怎样让文档模板使用新的视图类 62
3.26 怎样为文档创建多个视图 62
3.27 如何知道一个与FormView关联的文档已经改变 63
第四章 菜单 64
4.1 如何激活变灰的菜单 64
4.2 如何处理动态弹出菜单消息 64
4.3 怎样得到程序窗口菜单的指针 68
4.4 怎样动态地改变程序窗口的菜单 68
4.5 为什么调用EnableMenuItem()函数后菜单项仍无效 68
4.6 如何给系统菜单添加一个菜单项 69
4.7 如何确定顶层菜单所占据的菜单行数 70
4.8 组件库中浮动菜单组件的解析及应用 70
4.9 如何在应用程序中不加载菜单 73
4.10 多个MRU菜单的问题 74
4.11 定制File菜单中的MRU列表个数 76
4.12 在什么地方弹出菜单 76
4.13 怎样知道菜单运行时的状态 77
4.14 如何控制菜单的大小 78
4.15 如何获取其他窗口的菜单 79
4.16 为何不能使菜单项失效 79
4.17 在系统菜单中添加自己的菜单 80
4.18 关于消息映射及如何利用消息映射实现动态菜单 80
第五章 状态栏和工具栏 84
5.1 如何在应用程序中不加载工具栏和状态栏 84
5.3 如何允许和禁止工具栏的TIP提示 85
5.2 如何在代码中获取工具栏和状态栏的指针 85
5.4 如何设置工具栏标题 86
5.5 怎样在程序中关闭或打开工具栏和状态栏 86
5.6 怎样创建类似于Office的桌面快捷工具栏 86
5.7 如何进行工具栏的状态更新 87
5.8 如何在工具栏中加入组合框控件 89
5.9 工具栏的拖动停靠控制 92
5.10 为何在状态栏上不显示菜单项的提示 95
5.11 怎样把一个工具栏停在另一个工具栏的右方 95
5.12 如何在状态行中显示进度条 97
5.13 如何在另一线程中处理状态栏 98
第六章 对话框 100
6.1 对话框的组成及分类 100
6.2 为什么对话框显示不出来 100
6.3 怎样使窗口居中 101
6.4 如何动态设置对话框的标题 101
6.5 如何在对话框中动态地生成一个控件 102
6.6 如何及时得到编辑框中键入的每一个字符 104
6.7 如何阻止用户按Esc键直接退出对话框 104
6.8 如何改变对话框的背景颜色 105
6.9 怎样为对话框做一个背景图像 106
6.10 如何创建以位图为背景的对话框 107
6.12 如何动态生成对话框 109
6.11 如何使用Updatedata() 109
6.13 如何创建可伸缩的对话框 112
6.14 如何获取一个对话框控件的指针 116
6.15 如何使用无模式对话框 118
6.16 如何实现操作过程提示对话框 119
6.17 为什么有RichEdit控件的对话框无法显示 121
6.18 如何在运行时指定对话框的默认按钮 121
6.19 怎样控制对话框的大小 121
6.20 怎样创建一个带有工具栏和状态栏的对话框 123
6.22 属性页的问题 124
6.21 对话框中如何弹出消息对话框 124
6.23 如何创建属性表 125
6.24 如何隐藏属性表的APPLY按钮 127
6.25 如何为属性表增加编辑控件 127
6.26 如何改变属性页上的字体 128
6.27 在OnItitDialog()函数中初始化所有的属性页 128
6.28 如何为应用程序启动增加 日积月累 对话框 129
6.29 如何给对话框控件添加ToolTip 129
6.30 如何获取对话框中控件的窗口指针并进行一些常用操作 131
6.33 失去输入焦点时关闭对话框 132
6.31 怎样改变基本对话框应用程序的图标 132
6.32 设置对话框中控件的Tab顺序 132
6.34 怎样自定义系统对话框 134
6.35 如何创建一个不规则形状的对话框 135
6.36 如何为对话框加入位图按钮和TIP提示 137
6.37 用对话框的形式显示HTML文件 139
6.38 对话框中的汉字显示问题 141
6.39 怎样才能在线程中实现对话框的顶层显示 141
7.1 CToolTipCtrl的详细说明 142
第七章 Windows 常用控件 142
7.2 如何在CEditView中加入文本 144
7.3 怎样使编辑控件可以显示多行 144
7.4 如何在单行编辑框中响应回辐车键 144
7.5 怎样使编辑控件可以超过64KB的内容 145
7.6 如何限制编辑框中准许键入的字符 145
7.7 为什么CRichEdit中的滚动条不出现 146
7.8 如何设计数值调节钮控件 147
7.9 为什么数值调节钮控件的工作结果与预期的相反 147
7.12 如何使列表框可以多行选择 148
7.13 如何把列表控件中多选择的项删除 148
7.11 怎样使列表控件的内容能被整行选中 148
7.10 改变LVIS_SELECTED的状态颜色 148
7.14 列表框中的Tab字符处理 149
7.15 图像列表控件中图像橙色为什么显示为黄色 149
7.16 如何实现自绘式列表框 151
7.17 向列表框中添加多项时如何防止闪烁 153
7.18 如何知道列表框已经滚动了 153
7.19 如何获得列表框中选择变化时的通知 154
7.20 怎样在树控件中设置状态标志 154
7.21 如何为树控件中的项增加ToolTip 157
7.22 如何使树控件可以编辑节点 160
7.23 关于树控件的可见节点 161
7.24 如何得知树控件的展开和收合 162
7.25 怎样使用选项卡控件 163
7.26 如何设计组合框控件 165
7.27 自定义复选框类 166
7.28 如何定制复选框的点击属性 167
7.29 创建三态下压按钮的一个简易方法 168
7.30 如何改变按钮的背景色 169
7.31 如何制作图标按钮和位图按钮 171
7.32 在工具条中加入自定义的按钮 172
7.33 控件的焦点问题 173
7.34 怎样使控件失去焦点时得到输入内容 173
7.35 如何使一个控件失效 175
7.36 如何改变工具栏提示框的宽度 176
7.37 怎样使控件具有自己定制的显示效果 177
7.38 多个控件如何使用同一消息处理函数 178
7.39 如何改变控件的字体 179
7.40 如何改变控件的颜色 180
7.41 如何改变控件文本的颜色 181
7.42 如何改变被禁止控件的文本和背景色 182
7.43 如何生成自绘制控件类 182
7.45 如何在一个控件内检测并使用ON_COMMAND消息 187
7.44 如何动态创建控件 187
7.46 怎样实现控件的3D效果 188
7.47 如何在对话框中使用真彩色位图控件 188
7.48 怎样从对话框中得到一个控件对象 188
7.49 如何在状态条上加入日期和时间 188
第八章 文件 190
8.1 如何使用文件对话框 190
8.2 如何修改文件对话框标题 191
8.3 文件对话框中选择多个文件的问题 191
8.4 在不使用通用文件对话框的情况下如何显示一个文件列表 191
8.5 如何对驱动器内容进行操作 192
8.6 如何得到驱动器列表信息 196
8.7 自编删除目录及其下属文件的函数 197
8.8 怎样在目录中查找文件 199
8.9 如何打开一个目录 201
8.10 CFile使用了缓冲区吗 202
8.11 如何查找硬盘上的所有文件 202
8.12 在Windows 中实现文件拷贝的编程方法 203
8.13 在程序中直接读写文件 205
8.14 在哪里创建临时文件 206
8.15 如何得到长目录及长文件名 207
9.2 MFC打印功能内幕 208
第九章 打印及打印预览 208
9.1 MFC打印功能的五个步骤 208
9.3 如何用程序指定打印机 213
9.4 不用文档/视图结构能够直接打印吗 219
9.5 怎样用CPrintDialog来实现打印功能 220
9.6 如何控制打印字体 221
9.7 如何编写图像打印程序 228
第十章 动态链接库 230
10.1 如何定制和调用动态链接库DLL 230
10.2 如何编写MFC扩展DLL 232
10.3 Windows 95/98下的虚拟设备驱动程序基本概念 235
10.4 虚拟设备驱动程序VxD的理解及其开发工具 237
10.5 如何编写虚拟设备驱动程序(VxD) 239
10.6 VxD与应用程序间的通信机制 242
第十一章 内存管理及异常处理 248
11.1 如何知道一个指针指向的地址有效 248
11.2 关于内存分配 248
11.3 怎样实现不同程序间的内存共享 248
11.4 内存映射文件的工作原理及使用方法 252
11.5 如何利用内存映像文件进行内存共享 254
11.6 MFC中内存泄漏的检测 255
11.7 如何检测和隔离内存泄漏 259
11.8 异常及异常处理 263
11.9 混合使用MFC异常处理宏与C++异常关键字 265
第十二章 多任务、进程与线程 267
12.1 线程的概念 267
12.2 为什么要使用多线程 268
12.3 Visual C++的SDK多线程方法 268
12.4 Visual C++的MFC多线程方法 272
12.5 如何取得Console进程的窗口句柄 277
12.6 如何利用管道和线程实现进程间通信 280
12.7 如何使用事件与线程通信使线程同步和终止 281
12.8 如何在应用程序中启动其他应用程序 285
12.9 如何调用并执行其他程序 287
12.10 如何使程序自动运行 289
12.11 如何用程序打开一个URL 290
12.12 如何结束应用程序 290
12.13 如何退出应用程序 291
12.14 如何实现多线程的调度和处理 291
12.15 如何把类方法作为线程函数 294
12.16 应用程序之间互相通信的几种方法 295
13.1 在应用程序中如何使用注册表保存信息 299
第十三章 注册表操作 299
13.2 注册表接口(API)函数 300
13.3 访问注册表的两个实用函数 304
13.4 怎样像Winzip一样给Windows 右键菜单中添加快捷方式 307
13.5 向注册表中存取字符型值的完整例子 307
13.6 如何隐藏Windows 95/98注册表中的自启动键 312
13.7 远程注册表访问 313
第十四章 程序调试与代码优化 314
14.1 自动生成的代码为什么有编译错误 314
14.2 如何知道编译、连接的出错信息的含义 314
14.3 如何利用MFC和宏来改善应用程序的调试 315
14.5 在调试时如何把信息输出到控制台窗口 317
14.4 为Visual C++集成编译环境中的链接程序指定库文件 317
14.6 怎样使用Visual C++做远程调试 319
14.7 怎样使用Visual SourceSafe 319
14.8 怎样设置程序断点 321
14.9 在调试过程中,如何查看程序中变量或者表达式的结果 324
14.10 怎样调试线程 326
14.11 如何调试动态链接库 326
14.12 如何从调试到发行 327
14.13 如何通过优化使代码效率更高 328
15.1 如何编写安装程序 330
第十五章 帮助文件及安装程序的制作 330
15.2 如何利用InstallShield创建安装程序 333
15.3 安装程序的自动运行(Autoplay) 335
15.4 卸载程序 335
15.5 如何编写帮助程序 336
15.6 MFC对应用程序帮助的支持 336
15.7 用于创建帮助文件的RTF文件格式 337
15.8 显示帮助的方法 338
15.9 怎样为程序提供一个 这是什么? 的帮助 339
15.10 在帮助文件中添加图形 340
15.12 直接调用WinHelp 341
15.11 在MFC中设置帮助文件名 341
16.1 如何制作软件启动封面 343
第十六章 软件屏幕效果 343
16.2 如何制作真彩色的软件启动封面 344
16.3 如何实现滚动字幕的启动封面 345
16.4 怎样为程序设置自己的图标 349
16.5 怎样隐藏用户界面 349
16.6 实现全屏显示 349
16.7 如何实现Windows 任务栏图标 352
16.8 如何禁止Windows 95/98的TaskBar出现 358
16.10 如何做一个程序的快捷方式,并将它加至程序菜单及桌面上 359
16.9 关闭Windows 95/98下方任务栏的自动隐藏功能 359
第十七章 MFC中几个有用的类 361
17.1 如何快速地格式化一个CString对象 361
17.2 关于CString::GetLength()函数 361
17.3 如何获得CString对象的内部字符缓冲区的指针 361
17.4 字符串转化为CTime 362
17.5 什么时候不用CString类 365
17.6 如何实现一个橡皮区矩形 365
17.7 如何向CDWordArray中添加大量数据 367
17.8 关于COLORREF 367
17.10 Array和CList的使用 368
17.9 如何在不影响其他消息处理的情况下让程序等待2秒 368
17.11 Map的使用 369
第十八章 其他常见问题及技巧 370
18.1 如何显示随光标移动的TIP窗口 370
18.2 关于位图的颜色 371
18.3 使用拖放的简单方法 372
18.4 如何把小的数据文件集成到可执行文件中 374
18.5 在用户环境中如何确定系统显示元素的颜色 376
18.6 如何欺骗Windows 以为点在标题栏上 376
18.8 在Windows 95/98中利用剪贴板实现屏幕截词 377
18.7 如何在Visual C++中换Wallpaper 377
18.9 如何利用Visual C++编写Windows 95/98的CPL组件 381
18.10 如何查询和设置系统参数 386
18.11 如何确定当前屏幕分辨率 387
18.12 如何检索原先的Task Manager应用程序使用的任务列表 387
18.13 如何直接在程序中更改显示模式 388
18.14 如何在程序中获得其他程序的图标 389
18.15 如何确定应用程序的路径 390
18.16 如何获得各种目录信息 390
18.17 如何从其他应用程序中获取资源 390
18.18 怎样才能改变光标 390
18.19 关于双精度数据转换 391
18.21 用Visual C++汉化英文软件 392
18.20 修改资源文件以适应不同操作系统平台的需要 392
18.22 如何使用定时器TIMER 395
18.23 如何获取正在处理的当前消息状态 395
18.24 如何使用一个预定义的Windows 光标 395
18.25 如何使CDC类裁剪输出 396
18.26 如何访问预定义的GDI对象 397
18.27 如何获取GDI对象的属性信息 397
18.28 如何计算一串文字占用的大小 398
18.29 如何控制显示字体 399
18.31 如何显示旋转文本 403
18.30 怎样创建一个具有特定点大小的字体 403
18.32 如何显示包含制表符的串 404
18.33 串太长时如何在其末尾显示一个省略号 405
18.34 如何更新翻转背景颜色的文本 405
18.35 如何把Ctrl+Alt+Del,Ctrl+Esc,Alt+Tab等锁住 406
18.36 如何在程序中设置全局变量 406
18.37 所产生的stdafx.h文件是干什么用的 406
18.38 怎样才能建立一个等待光标 406
18.39 Win32中新增GDI对象路径及其在文字特显方面的应用 407
18.40 程序如何才能识别目前的操作系统环境 411
18.41 如何定义热键消息 412