第一篇 vc程序开发基础 1
第1章 vc与C++开发基础 1
1.1 C++面向对象特性 1
实例1:实现C++类的多重继承 1
实例2:使用虚函数实现运行时多态 3
实例3:使用操作符重载实现编译多态—复数的加法运算 6
实例4:使用函数模板实现不同数据类型的极值函数 7
1.2 C++常用的操作与算法 8
实例5:使用C++实现格式化数据的I/O 8
实例6:实现数字金额的中文大写转换 10
实例7:将十进制数转换为二进制输出 11
实例8:产生随机数 12
实例9:实现排序操作 13
1.3 创建基本的应用程序框架 16
实例10:使用Windows API创建程序窗口 16
实例11:使用AppWizard创建基于文档/视图结构MFC应用程序框架 18
实例12:使用AppWizard建立对话框应用程序框架 21
1.4 使用CString类进行字符串操作 23
实例13:查找、替换字符串 23
实例14:根据指定字符分割字符串 25
实例15:格式化字符串 26
实例16:CString字符串的类型转换 28
1.5 时间与日期操作 29
实例17:获取当前的日期、时间并格式化输出 30
实例18:计算某日为星期几 31
实例19:计算两个时间点的时间间隔 33
1.6 MFC集合类的使用 34
实例20:使用CStringArray类创建和使用字符串数组 34
实例21:使用CPtrList类创建和使用链表 36
第2章 消息映射与处理 40
2.1 键盘消息及处理 40
实例22:基本键盘操作—判断按键消息 40
实例23:在普通视图窗口中实现键盘字符的输入 42
实例24:创建和使用键盘插入符 43
实例25:使用程序模拟键盘输入 45
实例26:在对话框中实现键盘消息响应 46
实例27:向其他应用程序(记事本)中发送键盘消息 47
2.2 鼠标消息及处理 48
实例28:基本鼠标操作—判断鼠标消息 48
实例29:创建并设置鼠标光标 51
实例30:在对话框中定义光标的热区 52
实例31:创建和使用鼠标提示框 53
实例32:在视图窗口实现捕捉鼠标 54
实例33:限制鼠标的作用区域只在客户窗口 56
实例34:使用程序模拟鼠标动作 57
2.3 其他消息处理 58
实例35:创建和使用自定义消息 58
实例36:使用命令范围添加消息处理函数 59
实例37:使用定时器实时显示当前时间 61
实例38:使用定时器显示毫秒级的时间 62
第二篇 VC基本程序发要素 65
第3章 Windows基本控件的开发使用 65
3.1 按钮控件的使用 65
实例39:创建和使用下压按钮、单选框和复选框 65
实例40:实现位图按钮,设定控件文本的字体 68
实例41:实现超链接风格的按钮 70
实例42:实现动画按钮 74
3.2 编辑框控件的使用 76
实例43:使用单行、多行编辑框输入显示文本 76
实例44:只允许输入字母,并转换为大写的编辑框 77
实例45:在单行编辑框控件输入回车后,不响应默认控件处理消息 78
实例46:设置编辑框控件的背景、文本颜色 79
实例47:创建完全只读(没有输入焦点、不能选择)的编辑框 81
实例48:实现只能输入小数的编辑框控件 82
实例49:使用RichEdit编辑框格式化显示文本 84
3.3 静态控件的使用 87
实例50:设定静态文本框的背景色和文本颜色 87
实例51:使用Picture控件实现分隔线 88
实例52:使用静态文本控件显示图标和位图 88
实例53:在静态文本控件上进行绘图 89
实例54:创建显示数字钟的静态文本框 91
实例55:创建超链接风格的静态控件 94
3.4 使用列表框控件 96
实例56:添加删除列表框的数据 96
实例57:创建带有复选框的列表框和可拖放列表项的列表框 100
实例58:实现选中项缩进的列表框 101
实例59:创建带有智能水平滚动条的列表框 103
3.5 组合框控件的使用 105
实例60:添加和获取组合框的列表项 105
实例61:使用扩展组合框使组合框的选项带有图标 106
实例62:在组合框的下拉列表框中实现自动选择 108
实例63:创建颜色选择下拉组合框 109
3.6 滑块、调节钮、进度条和滚动条控件的使用 111
实例64:使用滑块控件和调节钮控件设置选择范围 111
实例65:使用滚动条和进度条进行范围设置 113
实例66:创建带有文本指示的自定义进度条 115
3.7 动态创建控件 117
实例67:动态创建和删除编辑控件 117
实例68:在视图中创建和使用控件 119
第4章 高级控件的开发使用 122
4.1 列表控件的使用 122
实例69:使用列表控件添加和选择数据项 122
实例70:动态设置列表控件的不同显示方式 125
实例71:实现列表控件的扩展风格—拖放、整栏选择和显示网格 126
4.2 树形控件的使用 127
实例72:使用树形控件显示数据 127
实例73:动态添加、删除树形控件的结点,获取树形控件的选中项 129
实例74:在树形控件中使用背景位图 130
实例75:创建可编辑结点的树形控件 133
实例76:使用树形控件和列表控件显示系统的资源列表 134
4.3 时间、日期控制控件的使用 137
实例77:在程序中使用月历控件 137
实例78:使用日期控件设置、获取日期时间信息 139
4.4 其他一些控件的使用 140
实例79:使用动画控件播放简单动画 140
实例80:使用IP地址控件显示和设置IP地址 142
实例81:使用标签控件创建标签页 143
实例82:使用热键控件为程序设置热键 145
4.5 ActiveX控件的使用与开发 147
实例83:在对话框窗口中使用Microsoft ActiveX控件FlexGrid 147
实例84:在视图窗口中动态创建ActiveX控件FlexGrid 151
实例85:使用MFC开发ActiveX控件OleEdit 154
实例86:通过例程测试ActiveX控件OleEdit 157
实例87:使用ActiveXControlTestContainer工具测试ActiveX 158
实例88:通过编程实现ActiveX控件的注册 159
实例89:使用ATL开发ActiveX控件MagicBox 161
实例90:通过例程测试ActiveX控件MagicBox 165
第5章 菜单、工具栏和状态栏的开发 167
5.1 菜单的设计与开发 167
实例91:基本下拉菜单的创建与消息响应 167
实例92:创建启用、禁用菜单项 168
实例93:创建单选标记菜单 169
实例94:动态添加、删除菜单项 170
实例95:创建带有图标的菜单 172
实例96:创建弹出式菜单 173
实例97:实现中英文双语菜单 174
实例98:为系统菜单添加菜单项 176
实例99:在对话框中添加菜单 178
实例100:使用快捷键和发送消息触发菜单命令 178
5.2 工具栏的设计与开发 179
实例101:基本工具栏按钮的创建与使用 179
实例102:保持工具栏按钮组中只有一个按钮被按下 181
实例103:在工具栏上同时显示位图和文本标签 182
实例104:为工具栏添加下拉按钮 183
实例105:在工具栏添加非按钮控件 185
实例106:实现在同一行上停靠两个工具栏 187
实例107:在对话框中添加工具栏 189
5.3 状态栏的设计与开发 190
实例108:在状态栏上实时显示当前时间 190
实例109:在状态栏上显示BMP位图 192
实例110:在状态栏上添加组合框控件 193
实例111:在状态栏上显示进度条 195
实例112:为对话框窗口创建状态栏 196
5.4 对话条和伸缩条 198
实例113:在单文档程序中创建对话条 198
实例114:实现对话条与窗口消息的信息交互 201
实例115:创建和使用伸缩条 202
第6章 对话框程序设计 204
6.1 基本对话框的创建与使用 204
实例116:创建模态对话框 204
实例117:创建非模态对话框 205
实例118:模态对话框与应用程序之间的数据交换 207
实例119:非模态对话框与应用程序之间的数据交换 209
6.2 通用对话框的创建与使用 212
实例120:使用MessageBox消息对话框 212
实例121:使用AfxMessageBox消息对话框 214
实例122:使用“字体”对话框更改文本的字体 215
实例123:使用“颜色”对话框选择颜色 216
实例124:使用文件对话框获取文件路径 217
实例125:使用多选文件对话框 218
实例126:重载打开文件对话框,添加删除按钮 219
实例127:使用查找替换对话框实现查找替换功能 221
6.3 属性表对话框与向导对话框 223
实例128:在程序中使用属性表对话框 224
实例129:激活属性表对话框中的“应用”按钮 226
实例130:去除属性表对话框中的“应用”按钮 228
实例131:在对话框中使用属性表 229
实例132:创建向导对话框 229
6.4 对话框程序界面设计 231
实例133:设置对话框的背景颜色 231
实例134:使用位图作为对话框背景 232
实例135:创建半透明对话框窗口 233
实例136:创建圆形对话框窗口 234
实例137:全屏幕显示对话框窗口 234
实例138:动态改变对话框窗口的大小 235
实例139:按下Esc键,对话框不关闭 237
实例140:禁用对话框右上角的关闭按钮 237
实例141:可在对话框的任意位置拖动对话框 238
实例142:为对话框程序制作启动画面 238
实例143:动态弹出、关闭对话框 240
实例144:在对话框上动态创建视图 242
第7章 文本输出与屏幕绘图 243
7.1 MFC设备描述表(DC) 243
实例145:在视图中使用CDC进行绘图操作 243
实例146:在视图中使用CPaintDC进行窗口重绘操作 244
实例147:在视图中使用CWindowDC在整个窗口进行绘图 245
实例148:在对话框窗口中进行绘图操作 245
7.2 字体与文本显示 246
实例149:创建字体进行文本输出 246
实例150:制作简单的立体字 248
实例151:制作空心立体字 248
实例152:显示倾斜的文字 249
实例153:制作滚动的字幕 251
实例154:获取系统中已安装的所有字体 252
7.3 画笔、画刷及区域对象的使用 253
实例155:使用不同的画笔绘制图形 253
实例156:使用不同类型的画刷填充矩形 254
实例157:使用CRgn对象得到某一特定区域 256
实例158:提取并显示鼠标指针所在图像点的颜色 258
实例159:绘制坐标刻度和自定义线条 259
实例160:绘制带有箭头的线条 260
7.4 位图对象与调色板的使用 262
实例161:在视图窗口中显示DDB位图 262
实例162:实现位图的各种缩放处理 263
实例163:实现局部放大位图 266
实例164:实现位图的镜像显示 268
实例165:通过区域剪裁显示椭圆位图 270
实例166:显示透明位图 271
实例167:复制位图到剪切板 272
实例168:抓取屏幕图像并在视图窗口中显示 273
实例169:创建和使用调色板 275
7.5 坐标系统与映射方式 277
实例170:使用不同的映射方式进行绘图 277
实例171:创建自定义坐标系进行绘图 278
实例172:制作绚丽的圆环 279
第8章 文档/视图框架体系 282
8.1 基本的文档、视图操作 282
实例173:在视图中使用鼠标进行绘图操作(涂鸦) 282
实例174:在文档中记录绘图数据,并实现窗口重绘 284
实例175:通过序列化保存文档 286
实例176:当文档被修改时在标题上给出提醒 288
实例177:使用对话框与文档视图进行数据交换 289
实例178:在多文档程序中为新建的文档设置显示字体 290
8.2 各种视图类型的使用 291
实例179:在滚动窗口中实现绘图 292
实例180:实现动态滚动窗口 293
实例181:在窗体视图(CFormView)中使用控件 295
实例182:在列表视图(CListView)中使用列表控件 296
8.3 文档/视图框架的程序界面设计 297
实例183:改变视图窗口的背景色 297
实例184:改变MDI框架窗口背景色 298
实例185:动态设置主框架窗口的图标 300
实例186:动态设置子框架窗口的图标 300
实例187:使窗口总在最前显示 301
实例188:MDI启动时不创建新文档,且限定框架窗口的大小和位置 301
实例189:限定框架窗口的大小和位置 303
实例190:限定MDI子框架窗口的最大、最小尺寸 303
实例191:实现客户窗口的全屏显示 304
实例192:为程序制作启动界面 306
实例193:以动画的方式启动、关闭窗口并添加位图背景 308
实例194:改变主窗口上的标题 309
实例195:为程序创建系统托盘图标 310
实例196:为程序创建类似迅雷的辅助隐藏窗口 312
8.4 窗口分割与多视图的实现 313
实例197:动态分割窗口,不同窗口对应同一视图 313
实例198:静态分割窗口,实现窗口的任意切分 314
实例199:固定分割窗口的分隔线 315
实例200:动态改变分割窗口的大小 317
实例201:定制分隔条的外观特性 318
实例202:多视图与文档的交互 318
第9章 打印、帮助、调试与发布 323
9.1 打印操作 323
实例203:实现“所见即所得”的打印 323
实例204:设置打印图形的位置 325
实例205:定制打印固定大小的单页文档 325
实例206:定制打印多页文档 327
实例207:定制打印页的页眉和页脚 330
9.2 帮助的使用 331
实例208:为对话框控件添加ToolTip提示框 331
实例209:使用AppWizard自动创建WinHelp帮助 332
实例210:制作WinHelp帮助文件 333
实例211:向程序中手工添加WinHelp帮助文件 335
9.3 调试技术与异常处理 336
实例212:调试环境配置—Debug模式和Release模式 336
实例213:设置位置断点跟踪程序 338
实例214:设置数据断点跟踪程序 339
实例215:使用断言宏检测程序的运行状态 340
实例216:使用跟踪宏在程序运行过程中输出调试信息 340
实例217:使用TRY-THROW-CATCH结构捕获处理异常 341
实例218:使用CFileException类捕获文件异常 342
9.4 程序的发布 344
实例219:为应用程序创建快捷方式 344
实例220:删除快捷方式 347
实例221:实现对软件的简单加密 349
实例222:开发简单的注册机 350
第三篇 vc高级开发技术 351
第10章 文件操作与注册表编程 351
10.1 基本的文件操作 351
实例223:创建文本文件并进行读写数据操作 351
实例224:在文件的指定位置存放和读取数据 353
实例225:复制、删除、移动文件 354
实例226:实现遍历目录下的每个文件 355
实例227:获取文件的属性 357
实例228:获取指定文件的图标 358
10.2 驱动器与文件目录操作 359
实例229:获取系统所有驱动器以及每个驱动器的序列号 359
实例230:获取驱动器的文件系统类型 361
实例231:获取磁盘的空间信息 361
实例232:判别磁盘驱动器的类型 362
实例233:获取当前目录、系统目录和Windows目录 364
实例234:创建和删除目录 365
实例235:删除非空目录 366
实例236:实现目录的复制操作 368
实例237:删除指定目录下某种类型的文件 369
实例238:获取目录的创建时间 372
实例239:获取应用程序的完整路径 372
10.3 常用文件操作 373
实例240:使用CStdioFile实现在txt文件中逐行读写数据 373
实例241:使用内存映射文件来共享数据 375
实例242:创建临时文件 376
实例243:使用INI文件保存程序的信息 376
实例244:使用剪贴板实现数据的复制和粘贴 378
实例245:实现拖放文件到视图窗口 379
实例246:实现拖放文件到对话框中的编辑控件 380
实例247:分割大文件为定长小文件 381
实例248:合并分割的小文件 383
10.4 注册表编程 385
实例249:使程序开机自动运行 385
实例250:使用默认浏览器打开某个网页 386
实例251:枚举注册表的键值名 387
实例252:设置和修改IE默认主页 388
实例253:设置软件的使用期限 391
实例254:限制软件的使用次数 394
实例255:使窗口开启时保持上次关闭时的大小 396
实例256:使用注册表模拟软件加密 397
第11章 进程与线程 400
11.1 基本线程的创建与使用 400
实例257:使用Win32API创建、销毁线程—控制进度条 400
实例258:创建MFC用户界面线程 402
实例259:创建MFC工作线程,进行耗时计算 404
实例260:设置线程的优先级 405
11.2 线程间的通信 406
实例261:使用全局结构进行线程间的通信 406
实例262:使用自定义消息进行线程间的通信 408
实例263:使用事件对象进行线程间的通信 410
11.3 线程的同步处理 412
实例264:使用CEvent对象实现线程同步 412
实例265:使用临界区对象(CriticalSection)实现线程同步 415
实例266:使用互斥对象(Mutex)实现线程同步 416
实例267:使用互斥对象(Mutex)实现不同进程间线程同步 417
实例268:使用信号量(Semaphore)实现线程同步 418
实例269:使用多线程进行文件搜索 419
11.4 进程的基本操作 422
实例270:获取当前系统的所有进程 422
实例271:实现应用程序在系统中只能运行一个实例 423
实例272:获取所有打开窗口程序的句柄、类名及标题 424
实例273:创建和终止进程 426
实例274:使用3种方法启动其他应用程序 427
11.5 进程间的通信 428
实例275:使用剪贴板实现程序间的数据交换 428
实例276:通过内存映射实现进程间的数据交换 430
实例277:通过消息机制实现进程间的通信 431
第12章 DLL开发与系统编程 433
12.1 基本Win32 DLL的创建与调用 433
实例278:创建导出浮点数四则运算函数的Win32DLL 433
实例279:使用显式方式调用DLL实现浮点数的四则运算 435
实例280:使用隐式方式调用DLL实现浮点数的四则运算 436
实例281:创建Win32DLL,导出一个全局变量 437
实例282:调用DLL,获取其导出的全局变量值 438
实例283:创建Win32DLL,导出一个计算长方体表面积和体积的类 439
实例284:调用DLL,使用其导出类计算长方体的表面积和体积 440
实例285:使用Depends工具查看程序调用的DLL文件 441
12.2 MFC常规DLL和扩展DLL的开发 441
实例286:创建MFC常规DLL,通过导出函数显示颜色信息对话框 442
实例287:调用MFC常规DLL,显示颜色信息对话框 443
实例288:创建MFC扩展DLL,实现圆形按钮类 444
实例289:调用MFC扩展DLL,创建圆形按钮 446
12.3 钩子技术的应用 446
实例290:创建记录键盘动作的全局钩子DLL 447
实例291:调用键盘钩子DLL,实现监视系统的键盘操作 448
实例292:创建记录当前鼠标指针所在窗口标题信息的鼠标钩子DLL 449
实例293:调用鼠标钩子DLL,显示鼠标指针所在窗口的标题 452
12.4 系统编程 453
实例294:获取当前操作系统的版本信息 453
实例295:获取系统CPU信息 455
实例296:获取系统内存的相关信息 456
实例297:获取当前系统所有安装的硬件设备 457
实例298:调用系统关机对话框 459
实例299:利用编码实现关闭和重启计算机 459
实例300:实现休眠计算机,并创建快捷键 461
实例301:显示并设置系统的显示属性 462
实例302:隐藏/显示系统的任务条 464
实例303:改变系统的桌面壁纸 466
第四篇 VC专项应用开发技术 469
第13章 网络编程 469
13.1 使用WinSock开发基本的网络程序 469
实例304:使用CAsyncSocket进行无连接(UDP)通信 469
实例305:使用CSocket进行有连接(TCP)通信 473
实例306:C/S结构信息转发器的实现—服务器 475
实例307:C/S结构信息转发器的实现—客户端 478
13.2 典型的网络应用实例 480
实例308:多人在线的网络聊天室—服务器 480
实例309:多人在线的网络聊天室—客户端 482
实例310:C/S结构点对点信息交互系统—服务器 485
实例311:C/S结构点对点信息交互系统—客户端 488
13.3 Internet相关程序开发 491
实例312:使用Winlnet通过HTTP协议读取网上文件 491
实例313:在对话框中,使用WebBrowser控件实现web浏览器 493
实例314:使用CHtmlView类,实现类似IE的网页浏览器 494
实例315:在对话框中显示HTML网页 496
实例316:获取IE运行实例的标题,并修改其标题 497
实例317:向IE的工具条上添加自定义的按钮图标 498
13.4 其他相关网络设置、网络程序的开发 500
实例350:在查询语句中使用字符串函数 577
实例351:在查询语句中使用数学函数 578
实例352:在查询语句中使用时间、日期函数 579
实例353:在查询时为表中的空字段添加默认信息 581
15.4 在查询语句中使用聚合函数进行统计分析 582
实例354:在查询中使用COUNT函数统计记录的个数 582
实例355:在查询中使用SUM函数实现求和运算 583
实例356:在查询中使用AVG函数实现求均值运算 583
实例357:在查询中使用MAX/MIN函数实现求极值 584
实例358:在查询中重复记录的统计 584
15.5 使用分组查询 585
实例359:在查询中进行分类汇总统计 585
实例360:在查询中根据多列信息进行分类汇总统计 585
实例361:在查询中对分组统计结果进行再筛选 586
实例362:在查询中实现对分组统计结果进行统计处理 586
15.6 多表连接查询 587
实例363:使用内连接进行多表查询 587
实例364:使用自连接简化查询过程 588
实例365:使用左外连接进行多表查询 589
实例366:使用右外连接进行多表查询 590
实例367:连接表后进行统计分析 591
15.7 使用子查询进行数据检索 592
实例368:在比较运算符中使用子查询 592
实例369:在查询中使用修改的比较运算符引入子查询 593
实例370:在查询语句中使用[NOT]IN引入子查询 594
实例371:在查询语句中使用EXISTS引入子查询 594
15.8 数据操纵与事务处理 595
实例372:使用INSERT向数据库表中添加记录 595
实例373:使用SELECT&INTO语句复制表中的数据 596
实例374:使用UPDATE语句修改记录 597
实例375:使用DELETE语句删除记录 597
实例376:创建和使用存储过程 598
实例377:在ADO中调用、执行SQLServer中的存储过程 599
实例378:在SQL中使用事务控制 602
实例379:在ADO中使用事务处理 604
第16章 数字图像处理基础 606
16.1 数字图像的显示 606
实例380:创建DIB操作的类—CDib 606
实例381:使用CDib类实现显示与保存BMP文件 615
实例382:使用IPicure显示多种格式的图像 620
16.2 使用DIB实现图像的特效显示 624
实例383:图像的扫描特效显示 624
实例384:图像的移动特效显示 627
实例385:图像的马赛克特效显示 630
实例386:图像的百叶窗特效显示 632
实例387:图像的栅格条交错特效显示 634
实例388:图像的伸缩特效显示 636
16.3 综合实例—雷达工程数据的可视化与处理 638
16.3.l 工程实例总体介绍 639
16.3.2 窗口分割与标尺的实现 639
16.3.3 从数据文件读取雷达数据 645
16.3.4 将雷达数据显示为BMP位图 648
16.3 5 开发要点:BMP文件的结构及显示 652
第17章 多媒体开发 654
17.1 动画开发 654
实例389:实现“静态”的位图动画 654
实例390:实现“动态”的位图动画 656
实例391:绘制三维图形 658
实例392:通过动态调整观察点位置实现三维动画 663
实例393:使用纹理显示图形 666
17.2 音频处理 668
实例394:用MessageBeep播放WAV文件 668
实例395:使用PlaySound播放WAV文件 669
实例396:使用低级波形音频函数播放WAV文件 671
实例397:创建基于MCI的WAV音频处理类—CMyMCIWave 676
实例398:使用CMyMCIWave类创建波形文件播放器 682
实例399:创建基于MCI的CD音频处理类—CMyMCICD 685
实例400:使用CMyMCICD类创建CD播放器 688
实例401:获取和设置系统音量 691
17.3 视频处理 695
实例402:创建基于MCI的数字视频处理类—CMyMCIVideo 695
实例403:使用CMyMCIVideo类创建数字视频播放器 699
实例404:使用MediaPlay ActiveX控件创建媒体播放器 701
实例405:使用VFW实现视频捕捉与保存 703
17.4 综合实例—基于音、视频传输的远程诊断系统 708
17.4.1 系统项目介绍 709
17.4.2 系统程序的工作流程 710
17.4.3 系统的核心类 714