
Programming with Microsoft Visual C++ .NET Core Reference
副标题:无
作 者:(美)George Shepherd,(美)David Kruglinski著;潘爱民译
分类号:
ISBN:9787302089315
微信扫一扫,移动浏览光盘
简介
[font color="#ff6600"]本书特色:[/font]
·既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。
·在讲解的时候语言简洁不啰嗦
·作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
[font color="#ff6600"]本书新增内容(主要是与第四版相比较)[/font]
·本书的前三部分内容主要针对桌面应用程序的开发,这既是mfc的传统优势,也是本书的传统优势。
·本书第四部分介绍了com、自动化、activex和ole。
·除了传统的c++编程之外,visual c++ .net还引入了一种新的编程模式
·internet开发是一个不可错过的部分。
·最后一部分介绍microsoft .net程序设计。这是本书完全新增的内容。
本书是经典的“visual c++技术内幕”的最新版。visual c++一方面是一个c++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些c++类库,其中最具影响力的当然是mfc。随着visual c++的发展,mfc已经不是visual c++中唯一的类库了,其他还有atl、stl等。此外,visual c++还融合了大量的开发工具,特别是与internet相关的开发支持。最后,本书也介绍了visual c++对.net的支持。总体而言,本书涵盖了当前最新的visual c++的主流技术,既有对老技术的继承和更新,也有对新技术的精辟阐述。所以,阅读本书可以全面拓宽读者的知识面。从这层意义上讲,本书相当于visual c++的百科全书,它浓缩了visual c++的精华。本书面向中级visual c++程序设计人员,并可以作为高年级计算机专业学生及软件学院学生的程序设计教程。
目录
第ⅰ部分 windows、visual c++ .net和应用程序框架基础
第1章 windows和visual c++ .net 3
1.1 windows编程模型 3
1.1.1 消息处理 3
1.1.2 windows的图形设备接口(gdi) 4
1.1.3 基于资源的程序设计 5
1.1.4 内存管理 5
1.1.5 动态连接库(dll) 5
1.1.6 win32应用程序编程接口 5
1.2 visual c++ .net的组成 6
1.2.1 visual c++ .net和创建过程 6
1.2.2 资源视图窗口和资源编辑器 9
1.2.3 c/c++编译器 9
1.2.4 源代码编辑器 9
1.2.5 资源编译器 10
1.2.6 连接器 10
1.2.7 调试器 10
1.2.8 mfc application wizard 11
1.2.9 class view 12
1.2.10 方案管理器 12
.1.2.11 对象浏览器 12
1.2.12 uml工具 13
1.2.13 联机帮助 13
1.2.14 windows诊断工具 14
1.2.15 mfc库版本7 14
1.2.16 atl库版本7.0 14
1.2.17 .net支持 15
第2章 microsoft基本类库应用程序框架 16
2.1 为什么要使用应用程序框架? 16
2.1.1 学习曲线 20
2.2 什么是应用程序框架? 20
2.2.1 应用程序框架和类库 20
2.2.2 应用程序框架示例 21
2.3 mfc库消息映射 24
2.4 文档和视图 24
第ⅱ部分 mfc基础
第3章 从mfc application wizard开始学习 29
3.1 什么是视图 29
3.2 mfc库应用程序的类型 30
3.3 mfc库支持的用户界面 30
3.4 ex03a:"不做任何事情"的应用程序 30
3.5 cex03aview视图类 34
3.6 在视图窗口内绘图:windows gdi 35
3.6.1 ondraw成员函数 35
3.6.2 windows设备环境 35
3.6.3 往ex03a程序中添加绘制代码 36
3.7 资源编辑器简介 37
3.7.1 ex03a.rc的内容 37
3.7.2 运行对话框资源编辑器 38
3.8 win32 debug目标和win32 release目标 39
3.9 对预编译头文件的理解 40
3.10 两种方法运行程序 42
第4章 visual c++ .net向导 43
4.1 向导的类型 43
4.2 向导是如何工作的 44
4.3 创建一个向导 45
4.4 创建一个"用托管c++来开发web应用"的向导 46
第5章 windows消息映射 53
5.1 获取用户输入--消息映射函数 53
5.1.1 消息映射 54
5.1.2 保存视图的状态:类的数据成员 54
5.1.3 初始化视图类数据成员 55
5.1.4 使矩形区域无效的理论 55
5.1.5 windows的客户区域 56
5.1.6 判断一个点是否在矩形内 56
5.1.7 判断一个点是否在椭圆内 57
5.1.8 ex05a示例程序 57
5.1.9 对ex05a使用class view 61
5.2 使用windows映射模式 64
5.2.1 mm_text映射模式 65
5.2.2 "固定比例"映射模式 66
5.2.3 "可变比例"映射模式 66
5.2.4 坐标转换 68
5.2.5 ex05b示例程序--转换到mm_himetric映射模式 69
5.3 创建一个滚动视图窗口 71
5.3.1 窗口比您所见到的要大 71
5.3.2 滚动条 71
5.3.3 滚动方式的选择 71
5.3.4 oninitialupdate函数 72
5.3.5 接收键盘输入 72
5.3.6 ex05c示例程序:滚动 72
5.4 使用其他windows消息 76
5.4.1 wm_create消息 76
5.4.2 wm_close消息 76
5.4.3 wm_queryendsession消息 76
5.4.4 wm_destroy消息 77
5.4.5 wm_ncdestroy消息 77
第6章 经典的gdi函数、字体和位图 78
6.1 设备环境类 78
6.1.1 显示设备环境类cclientdc和cwindowdc 79
6.1.2 构造和析构cdc对象 79
6.1.3 设备环境的状态 80
6.1.4 cpaintdc类 80
6.2 gdi对象 81
6.2.1 gdi对象的构造与析构 81
6.2.2 跟踪gdi对象 82
6.2.3 库存的gdi对象 82
6.2.4 gdi选择的有效期 83
6.3 字 体 84
6.3.1 字体是gdi对象 84
6.3.2 选择字体 84
6.3.3 打印字体 85
6.3.4 显示字体 85
6.3.5 显示器的逻辑英寸和物理英寸 86
6.3.6 计算字符高度 87
6.4 ex06a示例程序 87
6.4.1 ex06a程序的组成元素 90
6.5 ex06b示例程序 91
6.5.1 ex06b程序的组成元素 93
6.6 ex06c示例程序--再次使用cscrollview 94
6.6.1 ex06c程序的组成元素 97
6.6.2 cscrollview的setscaletofitsize模式 99
6.6.3 在滚动视图中使用逻辑twips映射模式 99
6.7 位 图 99
6.7.1 gdi位图和与设备无关的位图 99
6.7.2 彩色位图和单色位图 100
6.8 dib和cdib类 101
6.8.1 关于调色板编程的术语 101
6.8.2 dib、像素和颜色表 102
6.8.3 bmp文件中dib的结构 103
6.8.4 dib访问函数 104
6.8.5 cdib类 104
6.8.6 dib显示性能 110
6.8.7 ex06d示例程序 111
6.9 进一步使用dib 113
6.9.1 loadimage函数 113
6.9.2 drawdibdraw函数 114
6.10 在按钮上放置位图 115
6.10.1 ex06e示例程序 116
6.10.2 进一步使用位图按钮 118
第7章 对话框 119
7.1 模式和无模式对话框 119
7.2 资源和控件 119
7.3 模式对话框的编程 120
7.4 包罗万象的对话框--ex07a示例程序 121
7.4.1 创建对话框资源 122
7.4.2 创建对话框类 127
7.4.3 将对话框与视图相连接 131
7.4.4 深入理解ex07a应用程序 133
7.5 ex07a应用程序的改进 134
7.5.1 控制onok退出过程 134
7.5.2 oncancel处理 135
7.5.3 和滚动条控件挂上钩 136
7.6 控件的标识:cwnd指针和控件id 137
7.7 设置对话框的背景色和其中控件的颜色 138
7.8 在运行时加入对话框控件 139
7.9 利用其他的控件特性 139
7.10 windows通用对话框 139
7.10.1 直接使用cfiledialog类 140
7.10.2 从通用对话框类进行派生 140
7.10.3 嵌套对话框 141
7.10.4 ex07b示例程序:cfiledialog 141
7.10.5 cfiledialog的其他可定制特性 146
7.11 无模式对话框的编程 147
7.11.1 创建无模式对话框 147
7.11.2 用户定义的消息 147
7.11.3 对话框的所有关系(ownership) 148
7.11.4 ex07c示例程序:无模式对话框 148
第8章 通用控件 155
8.1 标准通用控件 155
8.1.1 进度指示器控件(progress control) 156
8.1.2 滑块控件(slider control) 156
8.1.3 微调控件(spin control) 157
8.1.4 列表控件 157
8.1.5 树状控件 157
8.1.6 wm_notify消息 158
8.2 ex08a示例程序:标准通用控件 158
8.3 高级通用控件 171
8.3.1 日期时间选择器 171
8.3.2 月历控件 172
8.3.3 ip地址控件 173
8.3.4 扩展的组合框控件 173
8.4 ex08b示例程序:高级通用控件 174
第9章 使用activex控件 187
9.1 activex控件和普通的windows控件 187
9.1.1 普通的windows控件:一个参考框架 188
9.1.2 activex控件与普通控件的相同点 188
9.1.3 activex控件与普通控件的不同点:属性和方法 188
9.2 安装activex控件 189
9.3 日历控件 191
9.4 activex控件包容器编程 192
9.4.1 属性访问 192
9.4.2 visual studio .net为activex控件产生的c++包装类 193
9.4.3 mfc application wizard对activex控件的支持 196
9.4.4 add class wizard和包容器对话框 196
9.4.5 把activex控件锁定在内存里 198
9.5 ex09a示例程序:activex控件对话框包容器 198
9.6 activex控件在html文件中的使用 206
9.7 在运行时创建activex控件 206
9.8 ex09b示例程序:web浏览器activex控件 207
9.9 图形属性 211
9.10 可绑定的属性:变化通知 211
第10章 win32核心内存管理 213
10.1 进程和内存空间 213
10.1.1 windows 95/98进程地址空间 214
10.1.2 windows nt/2000/xp的进程地址空间 215
10.2 虚拟内存如何工作 216
10.3 virtualalloc函数--占用和保留内存 218
10.4 windows堆和globalalloc函数族 219
10.5 小内存堆,c++的new和delete操作符,_heapmin 220
10.6 内存映射文件 221
10.7 访 问 资 源 222
10.8 管理动态内存的一些提示 222
10.9 常量数据的优化存储 223
第11章 windows消息处理和多线程编程 225
11.1 windows消息处理 225
11.1.1 单线程程序处理消息的过程 225
11.1.2 交出控制 226
11.1.3 计时器 226
11.1.4 ex11a示例程序 227
11.2 空状态处理 230
11.3 多线程编程 231
11.3.1 编写辅助线程函数和启动线程 231
11.3.2 主线程如何与辅助线程通话 232
11.3.3 辅助线程如何与主 线程通话 233
11.3.4 ex11b示例程序 234
11.3.5 用事件使线程同步 235
11.3.6 ex11c示例程序 236
11.3.7 线程阻塞 238
11.3.8 临界区 238
11.3.9 互斥体(mutex)和信号(semaphore) 240
11.3.10 用户界面线程(ui线程) 240
第ⅲ部分 mfc的文档-视图结构
第12章 菜单、键盘加速键、复文本编辑控件和属性表 243
12.1 主框架窗口和文档类 243
12.2 windows菜单 244
12.3 键盘加速键 245
12.4 命 令 处 理 246
12.4.1 派生类中的命令消息控制 247
12.4.2 更新命令用户界面消息控制函数 247
12.4.4 对话框发送的命令 248
12.5 应用程序框架的内置菜单命令 248
12.5.1 菜单命令的允许/禁用 249
12.6 mfc文本编辑选择 249
12.6.1 ceditview类 249
12.6.2 cricheditview类 250
12.6.3 cricheditctrl类 250
12.7 ex12a示例程序 250
12.8 属 性 表 256
12.8.1 创建属性表 256
12.8.2 属性表数据交换 256
12.9 改进ex12a示例程序 257
12.9.1 apply按钮的处理过程 269
12.10 cmenu类 269
12.11 创建浮动的快捷菜单 270
12.12 扩展的命令处理 271
第13章 工具栏和状态栏 273
13.1 控制栏和应用程序框架 273
13.2 工具栏 274
13.2.1 工具栏位图 274
13.2.2 工具栏按钮的状态 274
13.2.3 工具栏和命令消息 275
13.2.4 工具栏更新命令ui消息控制函数 276
13.3 工具提示 277
13.4 获得主框架窗口 277
13.5 ex13a示例程序:使用工具栏 278
13.6 状 态 栏 282
13.6.1 状态栏的定义 282
13.6.2 信息行 283
13.6.3 状态指示器 283
13.6.4 对状态栏的控制 284
13.7 ex13b示例程序:使用状态栏 285
13.8 rebar 289
13.8.1 解剖一个rebar 290
13.9 ex13c示例程序:使用rebar 290
第14章 可重用的框架窗口基类 294
14.1 为什么可重用基类难以设计 294
14.2 cpersistentframe类 295
14.3 cframewnd::activateframe成员函数 295
14.4 precreatewindow成员函数 296
14.5 windows注册表 297
14.6 使用cstring类 299
14.7 最大化窗口的位置 300
14.8 控制栏状态和注册表 301
14.9 静态数据成员 301
14.10 默认窗口矩形 301
14.11 ex14a示例程序:使用持续框架窗口类 302
14.12 mdi应用程序中的持续框架 307
第15章 文档与视图的分离 308
15.1 文档-视图之间的相互作用函数 308
15.1.1 cview∷getdocument函数 309
15.1.2 cdocument∷updateallviews函数 309
15.1.3 cview∷onupdate函数 310
15.1.4 cview∷oninitialupdate函数 310
15.1.5 cdocument∷onnewdocument函数 311
15.2 最简单的文档——视图应用程序 311
15.3 cformview类 312
15.4 cobject 类 313
15.5 诊断信息转储 313
15.5.1 trace宏 313
15.5.2 afxdump对象 314
15.5.3 信息转储环境及cobject类 314
15.5.4 未被删除对象的自动信息转储 315
15.6 ex15a示例程序:简单的文档——视图交互 318
15.7 更加高级的文档-视图交互 324
15.8 cdocument∷deletecontents函数 326
15.9 coblist集合类 326
15.9.1 对先入先出列表使用coblist类 326
15.9.2 在coblist中进行迭代--position变量 328
15.9.3 ctypedptrlist模板集合类 329
15.9.4 信息转储环境及集合类 329
15.10 ex15b示例程序:一个多视图sdi应用程序 330
15.10.1 资源要求 332
15.10.2 代码要求 332
15.10.3 保护类型的虚函数 346
15.10.4 测试ex15b应用程序 346
15.11 留给读者的两个练习 347
第16章 读和写文档 348
16.1 什么是序列化 348
16.1.1 磁盘文件和归档(archives) 349
16.1.2 使一个类可序列化 349
16.1.3 编写serialize函数 350
16.1.4 从归档中载入:内嵌对象和指针 351
16.1.5 使集合序列化 353
16.1.6 serialize函数和应用程序框架 353
16.2 sdi应用程序 354
16.2.1 windows应用程序对象 354
16.2.2 文档模板类 355
16.2.3 文档模板资源 356
16.2.4 sdi文档的多视图 357
16.2.5 创建空文档:cwinapp∷onfilenew函数 357
16.2.6 文档类的onnewdocument函数 358
16.2.7 连接file open与序列化代码:onfileopen函数 358
16.2.8 文档类的deletecontents函数 359
16.2.9 将file save和file saveas与序列化代码相连接 359
16.2.10 文档的"脏"标志 360
16.3 ex16a示例程序:支持序列化的sdi程序 360
16.3.1 cstudent 361
16.3.2 cex16aapp 361
16.3.3 cmainframe 365
16.3.4 cex16adoc类 368
16.3.5 cex16aview类 370
16.3.6 测试ex16a应用程序 370
16.4 从windows资源管理器启动及拖放 370
16.4.1 程序注册 371
16.4.2 在文档上双击鼠标 371
16.4.3 允许拖放 372
16.4.4 程序启动参数 372
16.4.5 试验用windows资源管理器启动程序及拖放 372
16.5 mdi支持 372
16.5.1 一个典型的具有mfc风格的mdi应用程序 373
16.5.2 mdi应用程序对象 374
16.5.3 mdi文档模板类 374
16.5.4 mdi框架窗口和mdi子窗口 375
16.5.5 主框架和文档模板资源 376
16.5.6 创建空文档 377
16.5.7 为已有的文档创建新的视图 378
16.5.8 载入和存储文档 378
16.5.9 多文档模板 378
16.5.10 从windows资源管理器启动及拖放 379
16.6 ex16b示例程序:mdi应用程序 380
16.6.1 cex16bapp 380
16.6.2 cmainframe 384
16.6.3 cchildframe 387
16.6.4 测试ex16b应用程序 389
16.7 mti支持 389
16.8 ex16c示例程序:mti应用程序 389
16.8.1 测试ex16c应用程序 391
第17章 打印和打印预览 392
17.1 基于windows的打印 392
17.1.1 标准打印对话框 392
17.1.2 交互选择打印页码 393
17.1.3 显示页和打印页 394
17.2 打 印 预 览 394
17.3 打印机的程序设计 395
17.3.1 打印机设备环境和cview::ondraw函数 395
17.3.2 cview::onprint函数 395
17.3.3 准备设备环境:cview::onpreparedc函数 395
17.3.4 打印任务的开始和结束 396
17.4 ex17a示例程序:一个所见即所得的打印程序 397
17.4.1 读取打印机矩形框 402
17.5 再看模板集合类:carray类 403
17.6 ex17b示例程序:多页打印程序 404
第18章 切分窗口和多视图 410
18.1 切分窗口 410
18.2 关于视图的选择 411
18.3 动态和静态切分窗口 411
18.4 ex18a示例程序:具有单个视图类的sdi动态切分 412
18.4.1 与切分有关的资源 412
18.4.2 cmainframe 413
18.4.3 测试ex18a应用程序 413
18.5 ex18b示例程序:双视图类sdi静态切分 414
18.5.1 chexview 414
18.5.2 cmainframe 415
18.5.3 测试ex18b应用程序 416
18.6 ex18c示例程序:切换视图类但不用切分窗口 416
18.6.1 资源要求 417
18.6.2 cmainframe 417
18.6.3 测试ex18c应用程序 418
18.7 ex18d示例程序:多视图类mdi应用程序 419
18.7.1 资源要求 419
18.7.2 cex18dapp 420
18.7.3 cmainframe 420
18.7.4 测试ex18d应用程序 421
第19章 上下文相关帮助 423
19.1 winhelp和html help 423
19.2 windows的winhelp程序 425
19.2.1 复文本格式(rtf) 425
19.2.2 编写简单的帮助文件 425
19.2.3 改进的目录 430
19.3 应用程序框架与winhelp 430
19.3.1 调用winhelp 431
19.3.2 使用搜索字符串 432
19.3.3 从应用程序的菜单来调用winhelp 432
19.3.4 帮助上下文别名 432
19.3.5 确定帮助上下文 433
19.3.6 f1帮助 434
19.3.7 shift+f1 帮助 434
19.3.8 消息框帮助:afxmessagebox函数 434
19.3.9 一般的帮助 435
19.4 帮助示例:不需要任何编程 435
19.5 帮助命令处理 437
19.5.1 f1处理过程 437
19.5.2 shift+f1处理过程 438
19.6 ex19b示例程序:帮助命令处理 438
19.6.1 头文件要求 439
19.6.2 cstringview 439
19.6.3 chexview 440
19.6.4 资源要求 440
19.6.5 帮助文件要求 440
19.6.6 测试ex19b应用程序 441
19.7 mfc和html help 441
19.8 ex19c示例程序:html help 442
第20章 动态链接库 444
20.1 基本dll理论 444
20.1.1 导入如何与导出相匹配 445
20.1.2 隐式链接和显式链接 446
20.1.3 符号链接和序号链接 446
20.1.4 dll入口点:dllmain 447
20.1.5 实例句柄:装载资源 448
20.1.6 客户程序如何找到dll 448
20.1.7 调试dll 449
20.2 mfc dll:扩展的和常规的 449
20.2.1 mfc扩展dll:导出类 450
20.2.2 mfc扩展dll的资源搜索序列 450
20.2.3 ex20a示例程序:mfc扩展dll 451
20.2.4 ex20b示例程序:dll测试客户程序 453
20.2.5 mfc常规dll:afx_extension_module结构 454
20.2.6 使用afx_manage_state宏 454
20.2.7 mfc常规dll的资源搜索序列 454
20.2.8 ex20c示例程序:mfc常规dll 455
20.2.9 修改ex20b示例程序:加入代码以测试ex20c.dll 457
20.3 自定义控件dll 458
20.3.1 什么是自定义控件 458
20.3.2 自定义控件的窗口类 459
20.3.3 mfc库和wndproc函数 459
20.3.4 自定义控件的通知消息 460
20.3.5 发送给控件的用户定义消息 460
20.3.6 ex20d示例程序:自定义控件 461
20.3.7 再修改ex20b示例程序:加入代码以测试ex20d.dll 466
第21章 不带文档或视图类的mfc程序 469
21.1 ex21a示例程序:一个基于对话框的应用程序 469
21.1.1 应用程序类的initinstance函数 471
21.1.2 对话框类和程序图标 472
21.2 ex21b示例程序:一个sdi应用程序 473
21.3 ex21c示例程序:一个mdi应用程序 475
第四部分 com、自动化、activex和ole 1
第22章 组件对象模型 1
22.1 activex技术 1
22.2 什么是com 2
22.3 ex22a示例程序:一个模拟的com 14
22.4 mfc库中实际的com 23
22.5 ex22b示例程序:mfc com进程内组件 34
22.6 ex22c示例程序:mfc com客户 39
22.7 包容、聚合和继承 40
第23章 自动化 1
23.1 为vba创建c++组件 1
23.2 自动化客户和自动化组件 2
23.3自动化接口 5
23.4 自动化程序设计的选择 6
23.5 一个mfc自动化组件 8
23.6 一个mfc自动化客户程序 9
23.7 使用了编译器的#import指令的自动化客户程序 12
23.8 variant类型 13
23.9 colevariant类 15
23.10自动化示例 18
23.11 vba早绑定 67
第24章 统一数据传输:剪贴板传输以及ole拖放 1
24.1 idataobject接口 1
24.2 formatetc和stgmedium结构 2
24.3 mfc对udt的支持 4
24.4 mfc crecttracker类 9
24.5 ex24a示例程序:数据对象剪贴板 11
24.6 mfc的拖放 20
24.7 ex24b示例程序:ole拖放 22
第25章 活动模板库介绍 1
25.1再谈com 1
25.2 编写com代码 4
25.3 com基础设施 7
25.4 atl简介 8
25.5 客户端atl程序设计 10
25.6 服务器端atl程序设计 27
25.7 属性化程序设计 54
第26章 atl和activex控件 1
26.1 什么是activex控件 1
26.2 用atl编写activex控件 2
26.3 创建一个属性化的控件 46
第27章 ole db模板 1
27.1 为什么使用ole db 1
27.2 ole db的基本结构 2
27.3 ole db模板的基本结构 3
27.4 创建一个ole db使用者 10
27.5 创建一个ole db提供者 16
27.6 属性化的ole db程序设计 27
第五部分 internet程序设计 1
第28章 internet基础 1
28.1 internet入门 2
28.2 建立一个intranet 11
28.3 winsock程序设计 13
28.4 用chttpblockingsocket建立一个web服务器 26
28.5 用chttpblockingsocket建立一个web客户 29
28.6 wininet 31
28.7 用mfc wininet类建立一个web客户 35
28.8 异步moniker文件 37
第29章 动态html简介 1
29.1 dhtml对象模型 1
29.2 visual c++ .net和dhtml 5
29.3 ex29a示例程序:mfc和dhtml 6
29.3 ex29b示例程序:dhtml和mfc 7
29.4 ex29c示例程序:atl和dhtml 12
29.5 进一步的信息 14
第30章 atl server 1
30.1 iis 1
30.2 isapi服务器扩展 6
30.3 atl server简介 9
30.4 ex30a示例程序:一个atl server web站点 16
第六部分 .net和远景 1
第31章 microsoft .net 1
31.1 windows组件技术 1
31.2 公共语言运行时库 5
第32章 托管c++ 1
32.1 公共语言运行时库与c++开发人员 1
32.2 为什么使用c++ 2
32.3 托管的c++扩展 3
32.4 visual c++ .net和托管扩展 4
32.5 ex32a示例程序:一个托管c++ dll程序集 5
32.6程序集的用法 12
32.7 ex32b示例程序:一个托管的客户可执行程序 13
32.8 加入托管扩展支持 16
第33章 用托管c++进行windows forms编程 1
33.1 windows forms 1
33.2 windows forms的不足 28
第34章 用托管c++进行asp.net编程 1
34.1 internet作为开发平台 1
34.2 asp.net的演变 2
34.3 iis的作用 3
34.4 asp.net的编译模型 4
34.5 page类 4
34.6 http传递路径 16
34.7 web服务 23
第35章 用托管c++进行ado.net编程 1
35.1 托管的提供者 1
35.2 使用托管提供者 3
35.3 ado.net数据集 9
附录a mfc库中的消息映射函数 1
附录b mfc库运行时类识别和动态对象创建 1
b.1 运行时获取对象的类名 1
b.2 mfc cruntimeclass结构和runtime_class宏 2
b.3 动态创建 4
b.4 示例程序 4
第1章 windows和visual c++ .net 3
1.1 windows编程模型 3
1.1.1 消息处理 3
1.1.2 windows的图形设备接口(gdi) 4
1.1.3 基于资源的程序设计 5
1.1.4 内存管理 5
1.1.5 动态连接库(dll) 5
1.1.6 win32应用程序编程接口 5
1.2 visual c++ .net的组成 6
1.2.1 visual c++ .net和创建过程 6
1.2.2 资源视图窗口和资源编辑器 9
1.2.3 c/c++编译器 9
1.2.4 源代码编辑器 9
1.2.5 资源编译器 10
1.2.6 连接器 10
1.2.7 调试器 10
1.2.8 mfc application wizard 11
1.2.9 class view 12
1.2.10 方案管理器 12
.1.2.11 对象浏览器 12
1.2.12 uml工具 13
1.2.13 联机帮助 13
1.2.14 windows诊断工具 14
1.2.15 mfc库版本7 14
1.2.16 atl库版本7.0 14
1.2.17 .net支持 15
第2章 microsoft基本类库应用程序框架 16
2.1 为什么要使用应用程序框架? 16
2.1.1 学习曲线 20
2.2 什么是应用程序框架? 20
2.2.1 应用程序框架和类库 20
2.2.2 应用程序框架示例 21
2.3 mfc库消息映射 24
2.4 文档和视图 24
第ⅱ部分 mfc基础
第3章 从mfc application wizard开始学习 29
3.1 什么是视图 29
3.2 mfc库应用程序的类型 30
3.3 mfc库支持的用户界面 30
3.4 ex03a:"不做任何事情"的应用程序 30
3.5 cex03aview视图类 34
3.6 在视图窗口内绘图:windows gdi 35
3.6.1 ondraw成员函数 35
3.6.2 windows设备环境 35
3.6.3 往ex03a程序中添加绘制代码 36
3.7 资源编辑器简介 37
3.7.1 ex03a.rc的内容 37
3.7.2 运行对话框资源编辑器 38
3.8 win32 debug目标和win32 release目标 39
3.9 对预编译头文件的理解 40
3.10 两种方法运行程序 42
第4章 visual c++ .net向导 43
4.1 向导的类型 43
4.2 向导是如何工作的 44
4.3 创建一个向导 45
4.4 创建一个"用托管c++来开发web应用"的向导 46
第5章 windows消息映射 53
5.1 获取用户输入--消息映射函数 53
5.1.1 消息映射 54
5.1.2 保存视图的状态:类的数据成员 54
5.1.3 初始化视图类数据成员 55
5.1.4 使矩形区域无效的理论 55
5.1.5 windows的客户区域 56
5.1.6 判断一个点是否在矩形内 56
5.1.7 判断一个点是否在椭圆内 57
5.1.8 ex05a示例程序 57
5.1.9 对ex05a使用class view 61
5.2 使用windows映射模式 64
5.2.1 mm_text映射模式 65
5.2.2 "固定比例"映射模式 66
5.2.3 "可变比例"映射模式 66
5.2.4 坐标转换 68
5.2.5 ex05b示例程序--转换到mm_himetric映射模式 69
5.3 创建一个滚动视图窗口 71
5.3.1 窗口比您所见到的要大 71
5.3.2 滚动条 71
5.3.3 滚动方式的选择 71
5.3.4 oninitialupdate函数 72
5.3.5 接收键盘输入 72
5.3.6 ex05c示例程序:滚动 72
5.4 使用其他windows消息 76
5.4.1 wm_create消息 76
5.4.2 wm_close消息 76
5.4.3 wm_queryendsession消息 76
5.4.4 wm_destroy消息 77
5.4.5 wm_ncdestroy消息 77
第6章 经典的gdi函数、字体和位图 78
6.1 设备环境类 78
6.1.1 显示设备环境类cclientdc和cwindowdc 79
6.1.2 构造和析构cdc对象 79
6.1.3 设备环境的状态 80
6.1.4 cpaintdc类 80
6.2 gdi对象 81
6.2.1 gdi对象的构造与析构 81
6.2.2 跟踪gdi对象 82
6.2.3 库存的gdi对象 82
6.2.4 gdi选择的有效期 83
6.3 字 体 84
6.3.1 字体是gdi对象 84
6.3.2 选择字体 84
6.3.3 打印字体 85
6.3.4 显示字体 85
6.3.5 显示器的逻辑英寸和物理英寸 86
6.3.6 计算字符高度 87
6.4 ex06a示例程序 87
6.4.1 ex06a程序的组成元素 90
6.5 ex06b示例程序 91
6.5.1 ex06b程序的组成元素 93
6.6 ex06c示例程序--再次使用cscrollview 94
6.6.1 ex06c程序的组成元素 97
6.6.2 cscrollview的setscaletofitsize模式 99
6.6.3 在滚动视图中使用逻辑twips映射模式 99
6.7 位 图 99
6.7.1 gdi位图和与设备无关的位图 99
6.7.2 彩色位图和单色位图 100
6.8 dib和cdib类 101
6.8.1 关于调色板编程的术语 101
6.8.2 dib、像素和颜色表 102
6.8.3 bmp文件中dib的结构 103
6.8.4 dib访问函数 104
6.8.5 cdib类 104
6.8.6 dib显示性能 110
6.8.7 ex06d示例程序 111
6.9 进一步使用dib 113
6.9.1 loadimage函数 113
6.9.2 drawdibdraw函数 114
6.10 在按钮上放置位图 115
6.10.1 ex06e示例程序 116
6.10.2 进一步使用位图按钮 118
第7章 对话框 119
7.1 模式和无模式对话框 119
7.2 资源和控件 119
7.3 模式对话框的编程 120
7.4 包罗万象的对话框--ex07a示例程序 121
7.4.1 创建对话框资源 122
7.4.2 创建对话框类 127
7.4.3 将对话框与视图相连接 131
7.4.4 深入理解ex07a应用程序 133
7.5 ex07a应用程序的改进 134
7.5.1 控制onok退出过程 134
7.5.2 oncancel处理 135
7.5.3 和滚动条控件挂上钩 136
7.6 控件的标识:cwnd指针和控件id 137
7.7 设置对话框的背景色和其中控件的颜色 138
7.8 在运行时加入对话框控件 139
7.9 利用其他的控件特性 139
7.10 windows通用对话框 139
7.10.1 直接使用cfiledialog类 140
7.10.2 从通用对话框类进行派生 140
7.10.3 嵌套对话框 141
7.10.4 ex07b示例程序:cfiledialog 141
7.10.5 cfiledialog的其他可定制特性 146
7.11 无模式对话框的编程 147
7.11.1 创建无模式对话框 147
7.11.2 用户定义的消息 147
7.11.3 对话框的所有关系(ownership) 148
7.11.4 ex07c示例程序:无模式对话框 148
第8章 通用控件 155
8.1 标准通用控件 155
8.1.1 进度指示器控件(progress control) 156
8.1.2 滑块控件(slider control) 156
8.1.3 微调控件(spin control) 157
8.1.4 列表控件 157
8.1.5 树状控件 157
8.1.6 wm_notify消息 158
8.2 ex08a示例程序:标准通用控件 158
8.3 高级通用控件 171
8.3.1 日期时间选择器 171
8.3.2 月历控件 172
8.3.3 ip地址控件 173
8.3.4 扩展的组合框控件 173
8.4 ex08b示例程序:高级通用控件 174
第9章 使用activex控件 187
9.1 activex控件和普通的windows控件 187
9.1.1 普通的windows控件:一个参考框架 188
9.1.2 activex控件与普通控件的相同点 188
9.1.3 activex控件与普通控件的不同点:属性和方法 188
9.2 安装activex控件 189
9.3 日历控件 191
9.4 activex控件包容器编程 192
9.4.1 属性访问 192
9.4.2 visual studio .net为activex控件产生的c++包装类 193
9.4.3 mfc application wizard对activex控件的支持 196
9.4.4 add class wizard和包容器对话框 196
9.4.5 把activex控件锁定在内存里 198
9.5 ex09a示例程序:activex控件对话框包容器 198
9.6 activex控件在html文件中的使用 206
9.7 在运行时创建activex控件 206
9.8 ex09b示例程序:web浏览器activex控件 207
9.9 图形属性 211
9.10 可绑定的属性:变化通知 211
第10章 win32核心内存管理 213
10.1 进程和内存空间 213
10.1.1 windows 95/98进程地址空间 214
10.1.2 windows nt/2000/xp的进程地址空间 215
10.2 虚拟内存如何工作 216
10.3 virtualalloc函数--占用和保留内存 218
10.4 windows堆和globalalloc函数族 219
10.5 小内存堆,c++的new和delete操作符,_heapmin 220
10.6 内存映射文件 221
10.7 访 问 资 源 222
10.8 管理动态内存的一些提示 222
10.9 常量数据的优化存储 223
第11章 windows消息处理和多线程编程 225
11.1 windows消息处理 225
11.1.1 单线程程序处理消息的过程 225
11.1.2 交出控制 226
11.1.3 计时器 226
11.1.4 ex11a示例程序 227
11.2 空状态处理 230
11.3 多线程编程 231
11.3.1 编写辅助线程函数和启动线程 231
11.3.2 主线程如何与辅助线程通话 232
11.3.3 辅助线程如何与主 线程通话 233
11.3.4 ex11b示例程序 234
11.3.5 用事件使线程同步 235
11.3.6 ex11c示例程序 236
11.3.7 线程阻塞 238
11.3.8 临界区 238
11.3.9 互斥体(mutex)和信号(semaphore) 240
11.3.10 用户界面线程(ui线程) 240
第ⅲ部分 mfc的文档-视图结构
第12章 菜单、键盘加速键、复文本编辑控件和属性表 243
12.1 主框架窗口和文档类 243
12.2 windows菜单 244
12.3 键盘加速键 245
12.4 命 令 处 理 246
12.4.1 派生类中的命令消息控制 247
12.4.2 更新命令用户界面消息控制函数 247
12.4.4 对话框发送的命令 248
12.5 应用程序框架的内置菜单命令 248
12.5.1 菜单命令的允许/禁用 249
12.6 mfc文本编辑选择 249
12.6.1 ceditview类 249
12.6.2 cricheditview类 250
12.6.3 cricheditctrl类 250
12.7 ex12a示例程序 250
12.8 属 性 表 256
12.8.1 创建属性表 256
12.8.2 属性表数据交换 256
12.9 改进ex12a示例程序 257
12.9.1 apply按钮的处理过程 269
12.10 cmenu类 269
12.11 创建浮动的快捷菜单 270
12.12 扩展的命令处理 271
第13章 工具栏和状态栏 273
13.1 控制栏和应用程序框架 273
13.2 工具栏 274
13.2.1 工具栏位图 274
13.2.2 工具栏按钮的状态 274
13.2.3 工具栏和命令消息 275
13.2.4 工具栏更新命令ui消息控制函数 276
13.3 工具提示 277
13.4 获得主框架窗口 277
13.5 ex13a示例程序:使用工具栏 278
13.6 状 态 栏 282
13.6.1 状态栏的定义 282
13.6.2 信息行 283
13.6.3 状态指示器 283
13.6.4 对状态栏的控制 284
13.7 ex13b示例程序:使用状态栏 285
13.8 rebar 289
13.8.1 解剖一个rebar 290
13.9 ex13c示例程序:使用rebar 290
第14章 可重用的框架窗口基类 294
14.1 为什么可重用基类难以设计 294
14.2 cpersistentframe类 295
14.3 cframewnd::activateframe成员函数 295
14.4 precreatewindow成员函数 296
14.5 windows注册表 297
14.6 使用cstring类 299
14.7 最大化窗口的位置 300
14.8 控制栏状态和注册表 301
14.9 静态数据成员 301
14.10 默认窗口矩形 301
14.11 ex14a示例程序:使用持续框架窗口类 302
14.12 mdi应用程序中的持续框架 307
第15章 文档与视图的分离 308
15.1 文档-视图之间的相互作用函数 308
15.1.1 cview∷getdocument函数 309
15.1.2 cdocument∷updateallviews函数 309
15.1.3 cview∷onupdate函数 310
15.1.4 cview∷oninitialupdate函数 310
15.1.5 cdocument∷onnewdocument函数 311
15.2 最简单的文档——视图应用程序 311
15.3 cformview类 312
15.4 cobject 类 313
15.5 诊断信息转储 313
15.5.1 trace宏 313
15.5.2 afxdump对象 314
15.5.3 信息转储环境及cobject类 314
15.5.4 未被删除对象的自动信息转储 315
15.6 ex15a示例程序:简单的文档——视图交互 318
15.7 更加高级的文档-视图交互 324
15.8 cdocument∷deletecontents函数 326
15.9 coblist集合类 326
15.9.1 对先入先出列表使用coblist类 326
15.9.2 在coblist中进行迭代--position变量 328
15.9.3 ctypedptrlist模板集合类 329
15.9.4 信息转储环境及集合类 329
15.10 ex15b示例程序:一个多视图sdi应用程序 330
15.10.1 资源要求 332
15.10.2 代码要求 332
15.10.3 保护类型的虚函数 346
15.10.4 测试ex15b应用程序 346
15.11 留给读者的两个练习 347
第16章 读和写文档 348
16.1 什么是序列化 348
16.1.1 磁盘文件和归档(archives) 349
16.1.2 使一个类可序列化 349
16.1.3 编写serialize函数 350
16.1.4 从归档中载入:内嵌对象和指针 351
16.1.5 使集合序列化 353
16.1.6 serialize函数和应用程序框架 353
16.2 sdi应用程序 354
16.2.1 windows应用程序对象 354
16.2.2 文档模板类 355
16.2.3 文档模板资源 356
16.2.4 sdi文档的多视图 357
16.2.5 创建空文档:cwinapp∷onfilenew函数 357
16.2.6 文档类的onnewdocument函数 358
16.2.7 连接file open与序列化代码:onfileopen函数 358
16.2.8 文档类的deletecontents函数 359
16.2.9 将file save和file saveas与序列化代码相连接 359
16.2.10 文档的"脏"标志 360
16.3 ex16a示例程序:支持序列化的sdi程序 360
16.3.1 cstudent 361
16.3.2 cex16aapp 361
16.3.3 cmainframe 365
16.3.4 cex16adoc类 368
16.3.5 cex16aview类 370
16.3.6 测试ex16a应用程序 370
16.4 从windows资源管理器启动及拖放 370
16.4.1 程序注册 371
16.4.2 在文档上双击鼠标 371
16.4.3 允许拖放 372
16.4.4 程序启动参数 372
16.4.5 试验用windows资源管理器启动程序及拖放 372
16.5 mdi支持 372
16.5.1 一个典型的具有mfc风格的mdi应用程序 373
16.5.2 mdi应用程序对象 374
16.5.3 mdi文档模板类 374
16.5.4 mdi框架窗口和mdi子窗口 375
16.5.5 主框架和文档模板资源 376
16.5.6 创建空文档 377
16.5.7 为已有的文档创建新的视图 378
16.5.8 载入和存储文档 378
16.5.9 多文档模板 378
16.5.10 从windows资源管理器启动及拖放 379
16.6 ex16b示例程序:mdi应用程序 380
16.6.1 cex16bapp 380
16.6.2 cmainframe 384
16.6.3 cchildframe 387
16.6.4 测试ex16b应用程序 389
16.7 mti支持 389
16.8 ex16c示例程序:mti应用程序 389
16.8.1 测试ex16c应用程序 391
第17章 打印和打印预览 392
17.1 基于windows的打印 392
17.1.1 标准打印对话框 392
17.1.2 交互选择打印页码 393
17.1.3 显示页和打印页 394
17.2 打 印 预 览 394
17.3 打印机的程序设计 395
17.3.1 打印机设备环境和cview::ondraw函数 395
17.3.2 cview::onprint函数 395
17.3.3 准备设备环境:cview::onpreparedc函数 395
17.3.4 打印任务的开始和结束 396
17.4 ex17a示例程序:一个所见即所得的打印程序 397
17.4.1 读取打印机矩形框 402
17.5 再看模板集合类:carray类 403
17.6 ex17b示例程序:多页打印程序 404
第18章 切分窗口和多视图 410
18.1 切分窗口 410
18.2 关于视图的选择 411
18.3 动态和静态切分窗口 411
18.4 ex18a示例程序:具有单个视图类的sdi动态切分 412
18.4.1 与切分有关的资源 412
18.4.2 cmainframe 413
18.4.3 测试ex18a应用程序 413
18.5 ex18b示例程序:双视图类sdi静态切分 414
18.5.1 chexview 414
18.5.2 cmainframe 415
18.5.3 测试ex18b应用程序 416
18.6 ex18c示例程序:切换视图类但不用切分窗口 416
18.6.1 资源要求 417
18.6.2 cmainframe 417
18.6.3 测试ex18c应用程序 418
18.7 ex18d示例程序:多视图类mdi应用程序 419
18.7.1 资源要求 419
18.7.2 cex18dapp 420
18.7.3 cmainframe 420
18.7.4 测试ex18d应用程序 421
第19章 上下文相关帮助 423
19.1 winhelp和html help 423
19.2 windows的winhelp程序 425
19.2.1 复文本格式(rtf) 425
19.2.2 编写简单的帮助文件 425
19.2.3 改进的目录 430
19.3 应用程序框架与winhelp 430
19.3.1 调用winhelp 431
19.3.2 使用搜索字符串 432
19.3.3 从应用程序的菜单来调用winhelp 432
19.3.4 帮助上下文别名 432
19.3.5 确定帮助上下文 433
19.3.6 f1帮助 434
19.3.7 shift+f1 帮助 434
19.3.8 消息框帮助:afxmessagebox函数 434
19.3.9 一般的帮助 435
19.4 帮助示例:不需要任何编程 435
19.5 帮助命令处理 437
19.5.1 f1处理过程 437
19.5.2 shift+f1处理过程 438
19.6 ex19b示例程序:帮助命令处理 438
19.6.1 头文件要求 439
19.6.2 cstringview 439
19.6.3 chexview 440
19.6.4 资源要求 440
19.6.5 帮助文件要求 440
19.6.6 测试ex19b应用程序 441
19.7 mfc和html help 441
19.8 ex19c示例程序:html help 442
第20章 动态链接库 444
20.1 基本dll理论 444
20.1.1 导入如何与导出相匹配 445
20.1.2 隐式链接和显式链接 446
20.1.3 符号链接和序号链接 446
20.1.4 dll入口点:dllmain 447
20.1.5 实例句柄:装载资源 448
20.1.6 客户程序如何找到dll 448
20.1.7 调试dll 449
20.2 mfc dll:扩展的和常规的 449
20.2.1 mfc扩展dll:导出类 450
20.2.2 mfc扩展dll的资源搜索序列 450
20.2.3 ex20a示例程序:mfc扩展dll 451
20.2.4 ex20b示例程序:dll测试客户程序 453
20.2.5 mfc常规dll:afx_extension_module结构 454
20.2.6 使用afx_manage_state宏 454
20.2.7 mfc常规dll的资源搜索序列 454
20.2.8 ex20c示例程序:mfc常规dll 455
20.2.9 修改ex20b示例程序:加入代码以测试ex20c.dll 457
20.3 自定义控件dll 458
20.3.1 什么是自定义控件 458
20.3.2 自定义控件的窗口类 459
20.3.3 mfc库和wndproc函数 459
20.3.4 自定义控件的通知消息 460
20.3.5 发送给控件的用户定义消息 460
20.3.6 ex20d示例程序:自定义控件 461
20.3.7 再修改ex20b示例程序:加入代码以测试ex20d.dll 466
第21章 不带文档或视图类的mfc程序 469
21.1 ex21a示例程序:一个基于对话框的应用程序 469
21.1.1 应用程序类的initinstance函数 471
21.1.2 对话框类和程序图标 472
21.2 ex21b示例程序:一个sdi应用程序 473
21.3 ex21c示例程序:一个mdi应用程序 475
第四部分 com、自动化、activex和ole 1
第22章 组件对象模型 1
22.1 activex技术 1
22.2 什么是com 2
22.3 ex22a示例程序:一个模拟的com 14
22.4 mfc库中实际的com 23
22.5 ex22b示例程序:mfc com进程内组件 34
22.6 ex22c示例程序:mfc com客户 39
22.7 包容、聚合和继承 40
第23章 自动化 1
23.1 为vba创建c++组件 1
23.2 自动化客户和自动化组件 2
23.3自动化接口 5
23.4 自动化程序设计的选择 6
23.5 一个mfc自动化组件 8
23.6 一个mfc自动化客户程序 9
23.7 使用了编译器的#import指令的自动化客户程序 12
23.8 variant类型 13
23.9 colevariant类 15
23.10自动化示例 18
23.11 vba早绑定 67
第24章 统一数据传输:剪贴板传输以及ole拖放 1
24.1 idataobject接口 1
24.2 formatetc和stgmedium结构 2
24.3 mfc对udt的支持 4
24.4 mfc crecttracker类 9
24.5 ex24a示例程序:数据对象剪贴板 11
24.6 mfc的拖放 20
24.7 ex24b示例程序:ole拖放 22
第25章 活动模板库介绍 1
25.1再谈com 1
25.2 编写com代码 4
25.3 com基础设施 7
25.4 atl简介 8
25.5 客户端atl程序设计 10
25.6 服务器端atl程序设计 27
25.7 属性化程序设计 54
第26章 atl和activex控件 1
26.1 什么是activex控件 1
26.2 用atl编写activex控件 2
26.3 创建一个属性化的控件 46
第27章 ole db模板 1
27.1 为什么使用ole db 1
27.2 ole db的基本结构 2
27.3 ole db模板的基本结构 3
27.4 创建一个ole db使用者 10
27.5 创建一个ole db提供者 16
27.6 属性化的ole db程序设计 27
第五部分 internet程序设计 1
第28章 internet基础 1
28.1 internet入门 2
28.2 建立一个intranet 11
28.3 winsock程序设计 13
28.4 用chttpblockingsocket建立一个web服务器 26
28.5 用chttpblockingsocket建立一个web客户 29
28.6 wininet 31
28.7 用mfc wininet类建立一个web客户 35
28.8 异步moniker文件 37
第29章 动态html简介 1
29.1 dhtml对象模型 1
29.2 visual c++ .net和dhtml 5
29.3 ex29a示例程序:mfc和dhtml 6
29.3 ex29b示例程序:dhtml和mfc 7
29.4 ex29c示例程序:atl和dhtml 12
29.5 进一步的信息 14
第30章 atl server 1
30.1 iis 1
30.2 isapi服务器扩展 6
30.3 atl server简介 9
30.4 ex30a示例程序:一个atl server web站点 16
第六部分 .net和远景 1
第31章 microsoft .net 1
31.1 windows组件技术 1
31.2 公共语言运行时库 5
第32章 托管c++ 1
32.1 公共语言运行时库与c++开发人员 1
32.2 为什么使用c++ 2
32.3 托管的c++扩展 3
32.4 visual c++ .net和托管扩展 4
32.5 ex32a示例程序:一个托管c++ dll程序集 5
32.6程序集的用法 12
32.7 ex32b示例程序:一个托管的客户可执行程序 13
32.8 加入托管扩展支持 16
第33章 用托管c++进行windows forms编程 1
33.1 windows forms 1
33.2 windows forms的不足 28
第34章 用托管c++进行asp.net编程 1
34.1 internet作为开发平台 1
34.2 asp.net的演变 2
34.3 iis的作用 3
34.4 asp.net的编译模型 4
34.5 page类 4
34.6 http传递路径 16
34.7 web服务 23
第35章 用托管c++进行ado.net编程 1
35.1 托管的提供者 1
35.2 使用托管提供者 3
35.3 ado.net数据集 9
附录a mfc库中的消息映射函数 1
附录b mfc库运行时类识别和动态对象创建 1
b.1 运行时获取对象的类名 1
b.2 mfc cruntimeclass结构和runtime_class宏 2
b.3 动态创建 4
b.4 示例程序 4
Programming with Microsoft Visual C++ .NET Core Reference
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!
