前言 1
第1章 创建第一个应用程序:学习使用VC++ 1
1.1 审视VC++ 1
译者序 1
1.1.1 Visual C++是什么 2
1.1.2 使用Visual C++ 2
1.2 NotePod项目:初步介绍 3
1.3 从AppWizard开始 4
1.3.1 AppWizard第一步:指定应用程序风格 4
1.3.2 AppWizard第二步:数据库支持 5
1.3.4 AppWizard第四步:更进一步的一些东西 6
1.3.3 AppWizard第三步:OLE支持 6
1.3.5 AppWizard“中场休息”:命名扩展名 7
1.3.6 AppWizard第五步:最后的一些事情 8
1.3.7 AppWizard第六步:具有视图的应用程序 8
1.4 浏览该项目 10
1.4.1 丰富的文件:FileView 11
1.4.2 浏览类:ClassView窗口 11
1.4.3 Resource View概览 12
1.5 运行NotePod项目 13
1.5.1 创建NotePod 13
1.5.2 运行NotePod 14
1.6.1 通过WizardBar简单了解 15
1.6 开始新的一切 15
1.6.2 意料之外的帮助 17
1.7 这究竟是怎么回事 17
第2章 Windows程序设计 19
2.1 DOS的问题 19
2.1.1 用户界面的问题 19
2.1.2 硬件相关性问题 20
2.1.3 协作问题 20
2.2 Windows解决方案 20
2.2.3 设备无关的输入/输出体系结构 21
2.2.1 统一的用户界面 21
2.2.2 Windows的消息体系结构 21
2.2.4 进程间的通信和协作 22
2.3 最初的Windows程序设计:API的使用 22
2.3.1 事件驱动是指什么 22
2.3.2 Windows应用程序体系结构 24
2.3.3 如何完成 25
2.3.4 WinMain()函数 26
2.3.5 WndProc()函数内幕 29
2.4.1 何谓MFC 30
2.4.2 类库与应用程序框架 30
2.3.6 Windows API程序设计小结 30
2.4 Windows程序设计:MFC 30
2.4.4 一个MFC小程序 31
8.3.1 CPen、颜色和其他CDC属性 31
2.4.3 为什么使用MFC 31
2.5 马上转向MFC 36
第3章 建立一个简单的基于对话框的应用程序 37
3.1 资源和对话框 37
3.2 启动对话框编辑器 41
3.2.1 控件工具栏 41
3.2.2 开始About对话框 42
3.3 位图编辑器的使用 43
3.3.1 添加新图标 44
3.3.2 修改应用程序图标 45
3.4 对话框编辑器 48
3.4.1 组件的选取、重定义大小以及移动 49
3.4.2 对话框工具栏介绍 50
3.4.3 处理静态文本 50
3.4.4 创建位图资源 54
3.4.5 最后一个控件:组框(Groupbox) 55
3.5 最后的检查 56
第4章 对话框 58
4.1 FourUp应用程序的结构 58
4.1.1 所需模块 58
4.1.2 其他方面 59
4.1.3 FourUp家族 60
4.2 应用程序对象 61
4.2.1 CFourUp.h 62
4.2.2 FourUp.cpp 65
4.2.3 关于CWinApp 69
4.3 窗口 69
4.3.1 关于CWnd 69
4.3.3 CDialog类 70
4.3.3 CAboutDIg浏览 70
4.3.4 遍历CFourUpDlg 71
4.4.1 资源描述和资源编译器 75
4.4 资源介绍 75
4.4.2 图标资源 76
4.4.3 关于位图资源 76
4.4.4 对话框资源 77
4.5 小结 77
第5章 控件和Class Wizard:实现你的对话框 78
5.1 努力方向 78
5.2 对话框编辑器回顾 79
5.2.1 添加牌张 79
5.2.2 安排图标 81
5.2.5 创建赔率表 82
5.2.4 添加标题区 82
5.2.3 添加游戏区域 82
5.2.6 标识按钮 83
5.3.1 事件计划 84
5.3 编写代码 84
5.3.2 手工编写代码:添加数据成员 85
5.4.1 生成OnCancel()函数 86
5.4 响应BN_CLICKED事件 86
5.4.2 编写代码:完成OnCancel()函数 87
5.5 编写OnDealCards()函数 88
5.5.1 OnDealCards():初稿 88
5.5.2 ClassWizard和控件变量介绍 89
5.6.2 创建Icon变量 91
5.6.1 创建Card变量 91
5.6 编写代码:发牌、计算输赢 91
5.6.3 编写DealCards()成员函数 92
5.6.4 编写CalculateWinnings()成员函数 94
5.6.5 最后一件事 95
5.7 姑且一试 95
第6章 理解控件 96
6.1 CWnd的简短说明 96
6.1.1 窗口的构造 96
6.1.2 CWnd::Create()函数 97
6.1.3 窗口风格一览 97
6.1.4 创建子窗口 98
6.1.5 有用的CWnd函数 99
6.2 CStatic再学习 100
6.2.1 创建CStatic控件 100
6.2.2 CStatic控件的使用 102
6.2.3 CStatic成员函数 103
6.3 CButton家族 103
6.3.1 创建CButton控件 104
6.3.2 CButton控件的使用 108
6.4 小结 109
7.1.1 LineOne项目 110
7.1.2 建立项目骨架 110
7.1 LineOne上的图形 110
第7章 用数字绘图:建立一个画图应用程序 110
7.1.3 加入一些线 111
7.2 LineOne内部 112
7.2.1 OnPaint()是什么 113
7.2.2 获取画布 113
7.2.3 准备环境 114
7.2.4 绘制直线 114
7.3 LineTwo应用程序 115
7.3.1 建立LineTwo 115
7.3.2 LineTwo是如何工作的 116
7.3.3 LineTwo工作的缺陷 117
7.3.4 用ClassWizard添加一个窗口消息处理函数 117
7.4 Windows的图案绘制 118
7.5 绘图工具 120
7.5.1 库存画笔和画刷 121
7.5.2 库存画笔和画刷的使用 121
7.6 连续绘图 122
7.7 PaintItGray 124
7.8 勇往无前 126
第8章 图形和文本 127
8.1 Windows和GDI的内幕 127
8.2 CDC家族介绍 129
8.3 GDI的画图工具箱 130
8.3.2 GDI CBrush类 135
8.4 CDC绘画的模式 137
8.5 创建你自己的屏幕保护程序 138
8.6 下一步 141
第9章 建立一个交互式的绘画程序 142
9.1 PaintORama版本1 142
9.1.1 建立PaintORama 143
9.1.2 添加成员变量 144
9.1.3 初始化成员变量 145
9.1.4 添加一个Clear按钮 147
9.1.5 鼠标消息如何工作 148
9.1.6 WM_LBUTTONDOWN:启动画图 148
9.1.7 WM_LBUTTONUP:画线结束 150
9.1.8 WM_MOUSEMOVE:使所有像素排成一行 150
9.2 PaintORama版本2:改进画笔 151
9.2.1 Spin控件 152
9.2.2 与代码建立联系 154
9.3 预告 157
10.1.1 增加多种颜色 158
10.1.2 颜色选择:CColorDialog 158
10.1 PaintORama版本3:颜色和风格 158
第10章 第二代PaintORama 158
10.1.3 颜色框绘制 161
10.1.4 单选按钮和画笔风格 162
10.2 PaintORama:线和外形 164
10.2.1 小巧而精美的组合框 164
10.2.2 线和外形 166
10.2.3 橡皮圈的秘密 168
10.3 PaintORama:最终的版本 169
10.3.1 制作列表 169
10.3.2 编写画刷部分的代码 171
10.3.3 添加画刷预览和颜色支持 173
10.4 仍需改进 174
第11章 建立文档和视图 175
11.1 PaintORama:WM_PAINT的再次处理 175
11.1.1 PaintORama概览 176
11.1.2 创建CMetaFileDC对象 176
11.1.3 用CMetaFileDC进行记录 177
11.1.4 回放图元文件 180
11.1.5 小的补充 181
11.2 SDIOne:转向Doc View 182
11.2.1 建立第一个SDI应用程序 183
11.2.2 在SDIOne中处理文档 184
11.2.3 SDIOne中的视图处理 187
11.3 立竿见影 189
第12章 DocView环境 191
12.1 DocView概述 191
12.1.1 DocView程序的类型 191
12.1.2 DocView的优点 192
12.2 DocView的组成 192
12.2.1 应用程序类 193
12.2.2 主窗口类 193
12.2.3 文档类 194
12.2.4 视图类 197
12.2.5 权利和义务 198
12.3 CSDIOneApp的InitInstance() 198
12.3.1 应用程序的建立 198
12.3.2 连接各模块 202
12.3.3 外壳 203
12.3.4 命令行 203
12.3.5 窗口处理 204
12.3.6 CSDIOneApp的消息映射 204
12.4 下面学习什么 205
13.1 名称中有什么 206
第13章 MiniSketch应用程序 206
13.2 往MiniSketch应用程序中增加菜单 209
13.2.1 添加菜单标题:Clear Drawing 210
13.2.2 使用菜单编辑器 210
13.2.3 添加一个菜单项处理过程 212
13.2.4 幕后:ClassWizard的机制 214
13.3 处理画笔 215
13.3.1 添加一个新菜单 215
13.3.2 画笔颜色:添加对话框选项 216
13.3.3 画笔宽度:添加级联式菜单 219
13.4 下一步的工作 222
14.1 命令UI 224
第14章 菜单、工具栏和状态栏 224
14.1.1 方法1:单独的UI处理函数 225
14.1.2 方法2:多个宏,一个处理函数 226
14.1.3 方法3:使用ON_UPDATE_COMMAND_UI_RANGE来代替 227
14.2 加速键 227
14.3 工具栏 229
14.3.1 打开颜色设置框——一个命令按钮式的工具栏按钮 230
14.3.2 添加图形形状类按钮:单选框按钮和工具栏按钮 232
14.4 状态栏 235
14.4.1 移去不期望的指示器 235
14.4.2 添加自己的指示器 235
14.4.3 添加一个画笔颜色指示器 238
14.5 下一步的工作 243
第15章 保存MiniSketch:操作文档和文件 244
15.1 点和图形 244
15.1.1 类和属性 245
15.1.2 Shape对象的行为 246
15.2 定义Shape类 246
15.2.1 创建类文件 246
15.2.2 Shape类定义 248
15.2.3 Line类定义 249
15.2.4 Squiggle类定义 249
15.2.5 FilledShape类定义 250
15.2.6 Box和Oval类定义 251
15.3 实现Shape类 252
15.4 使用Shape类 254
15.5 保存MiniSketch中的数据 256
15.6 序列化 259
15.6.1 MFC序列化细节 260
15.6.2 编写Serialize() 260
15.7 还要查看哪些东西 262
第16章 新的视野:翻滚和打印 263
16.1 画刷颜色 263
16.2.1 创建新的图形 265
16.2 把文档和视图联系起来 265
16.2.2 完成该图形的绘制 266
16.2.3 橡皮圈 267
16.3 绘制图形 268
16.3.1 自我描绘图形 268
16.3.2 处理Update() 270
16.3.3 重新编写OnDraw() 270
16.4 选择视图:映射模式 271
16.4.1 MM_TEXT映射模式 272
16.4.2 设备无关性映射模式 272
16.4.3 调整MiniSketch应用程序中的映射模式 273
16.5 翻滚视图 274
16.6 打印和打印预览 276
16.6.1 MFC打印函数 276
16.6.2 MiniSketch应用程序例子 278
16.7 谈谈一个崭新的话题 280
第17章 软件重用:构造一个基于组件的应用程序 281
17.1 考察Gallery 282
17.2 WordZilla应用程序范例: 286
17.3 增强WordZilla应用程序 290
17.7.1 安装缺省字体 290
17.3.2 设置一个新字体 291
17.3.3 创建字符属性按钮 293
17.3.4 创建段落属性按钮 294
17.4 在对话框中应用ActiveX 297
第18章 ActiveX和基于组件的应用程序 298
18.1 给Wordzilla添加对话框 299
18.1.1 画一个Select A Date对话框 299
18.1.2 创建对话框类 301
18.1.3 联系该对话框 302
18.2 模态对话框是如何工作的 304
18.2.1 构造一个对话框 305
18.2.3 对话框的数据传输怎样实现 306
18.2.2 显示一个对话框 306
18.2.4 关闭对话框 307
18.2.5 处理OK 307
18.3 使用非模态对话框 308
18.3.1 非模态对话框如何工作 308
18.3.2 Wordzilla中的非模态对话框 308
18.4 ActiveX日期捕捉器 313
18.4.1 添加ActiveX控件 313
18.4.2 对话框编辑器中的ActiveX控件 314
18.4.3 ActiveX控件、代码和ClassWizard 316
18.5 再谈谈ActiveX 318
18.4.4 属性事件和方法 318
18.6 接下来的工作:操作存储空间 320
第19章 创建数据库查寻和更新应用程序 321
19.1 获得一些数据 321
19.2 使用ODBC的非编码记录 322
19.2.1 步骤1:创建一个数据源名称 323
19.2.2 步骤2:使用AppWizard创建一个ODBC应用程序 325
19.2.3 步骤3:创建你的表单 326
19.2.4 步骤4:联系各部分 328
19.3 往OBos中添加代码 329
19.3.1 添加一个记录过滤器 330
19.3.2 添加和删除记录 331
19.4 使用DAO 335
19.4.1 创建一个CDaoRecordView应用程序 336
19.4.2 改进DBos应用程序 338
19.5 使用OLE DB 341
19.6 下一步:ActiveX和简便之途 342
第20章 关系数据库 343
20.1 什么是关系数据? 343
20.1.1 设计图解 343
20.1.2 关键字概念 344
20.2 使用DAO查看数据库 345
20.2.1 DBExplore例子 345
20.2.2 在OnFileOpen()中使用DAO类 348
20.2.3 探究其他的对象 349
20.3 关系数据库:SQL 352
20.3.1 SELECT命令 352
20.3.2 选择域 352
20.3.3 选择行:使用Where子句 353
20.3.4 谓词This 353
20.4 AcitveX数据库控件 355
20.5 往DBExplore中添加ActiveX 356
20.5.1 步骤1:添加ActiveX数据控件 356
20.5.2 步骤2:往主表单添加组件 358
20.5.3 步骤3:创建查询结果对话框 360
20.5.4 步骤4:激活查询按钮 361
20.5.5 工作原理的简单说明 363
20.6 下一步:Web 364
第21章 网络编程:浏览器和其他客户程序 365
21.1 HTMLView 365
21.2 提供Bowser缺省主页 367
21.2.1 主页源代码 367
21.2.2 理解HTML语言 370
21.2.3 帮助Bowser找到主页 371
21.3 Visual C++新功能:HTML资源 372
21.3.1 引入Bowser.html文件 373
21.3.2 引入图形文件 374
21.3.3 使用res:协议 375
21.4 开发导航工具 376
21.4.1 创建工具栏 376
21.4.2 添加代码 379
21.4.3 处理Open对话框 381
21.5 使用WinInet类 383
21.5.1 WinInet是什么 384
21.5.2 简单的WinInet应用程序 384
21.5.3 WinInet其他功能 386
21.6 保存自己的Bowser 386
21.7 再见 388