v

您的位置:VeryCD资料其它资料

资料资源事务区


《Visual C++从初学到精通 光盘 压缩包》[压缩包]

  • 状态: 精华资源
  • 摘要:
    发行时间2010年06月
    对白语言普通话
    文字语言简体中文
  • 时间: 2010/09/15 21:39:44 发布 | 2010/10/15 13:46:13 更新
  • 分类: 资料  其它资料 

zz8010

精华资源: 10

全部资源: 15

相关: 分享到新浪微博   转播到腾讯微博   分享到开心网   分享到人人   分享到QQ空间   订阅本资源RSS更新   美味书签  subtitle
该内容尚未提供权利证明,无法提供下载。
中文名Visual C++从初学到精通 光盘 压缩包
资源格式压缩包
发行时间2010年06月
地区大陆
对白语言普通话
文字语言简体中文
简介

IPB Image

ADSL上传有限,给大家提供一个HTTP下载方式。有兴趣的朋友,下载后,帮忙分流一下。谢谢了。

分卷1:http://u.115.com/file/f450a4790a
分卷2:http://u.115.com/file/f41003c6ac


115的网盘下载需要注册帐号或者使用他的专有下载工具。


内容简介

   本书介绍了如何使用Visual C++ 6.0编写Windows应用程序。全书内容全面、结构清晰、由浅入深、注重实用,并结合了大量的实例,以方便读者理解。本书既包含菜单、鼠标、键盘等基本操作,又包含图形编程、Internet程序设计、数据库编程等高级主题。每章讲述一个主题,在展示知识点的同时,提供具体的演示实例,最后两章详细讲解了两个综合实例,以使读者对Visual C++编程技术有整体的认识。

目 录

第一篇 Visual C++基础
第1章 Visual C++集成开发环境 2
1.1 Visual C++的版本 2
1.2 安装Visual C++ 6.0 3
1.3 Visual C++集成开发环境 6
1.3.1 菜单栏 7
1.3.2 工具栏 11
1.3.3 工作区窗口 13
1.3.4 输出窗口 14
1.4 编写第一个程序Hello World 14
1.4.1 创建Hello World工程 15
1.4.2 编译并执行程序 16
1.5 小结 16
第2章 使用Visual C++创建基本应用程序 17
2.1 理解Visual C++工程 17
2.2 Visual C++中应用程序的类型 18
2.2.1 控制台应用程序 18
2.2.2 基于对话框的应用程序 19
2.2.3 单文档应用程序 19
2.2.4 多文档应用程序 19
2.2.5 基于HTML文档的应用程序 19
2.3 创建应用程序框架 20
2.3.1 创建基于对话框的应用程序 20
2.3.2 创建单文档应用程序 21
2.3.3 创建多文档应用程序 23
2.3.4 创建基于HTML的应用程序 24
2.4 小结 25
第3章 面向对象程序设计基础 26
3.1 面向过程与面向对象 26
3.1.1 面向过程的问题 26
3.1.2 面向对象的特性 27
3.2 C++类的基本概念 27
3.2.1 结构体与类 27
3.2.2 类与对象 29
3.2.3 类的声明、定义和实现 29
3.2.4 成员变量 31
3.2.5 成员函数 32
3.2.6 静态成员 34
3.2.7 this指针 35
3.3 构造函数 37
3.3.1 使用构造函数的原因 37
3.3.2 构造函数的使用 37
3.3.3 重载构造函数 40
3.3.4 析构函数 41
3.4 继承 43
3.4.1 继承的概念 43
3.4.2 继承的工作机制 43
3.4.3 公有继承 44
3.4.4 私有继承 46
3.4.5 保护继承 47
3.4.6 多重继承 49
3.5 异常处理 51
3.5.1 异常的概念 51
3.5.2 异常处理机制 51
3.5.3 基本异常处理方法 52
3.5.4 多个异常处理方法 54
3.6 小结 56
第4章 Visual C++调试技术 57
4.1 Debug与Release 57
4.2 调试的过程 58
4.2.1 设置断点 58
4.2.2 控制程序的运行 60
4.3 使用查看工具 60
4.3.1 弹出式调试信息泡泡 61
4.3.2 变量窗口 61
4.3.3 观察窗口 61
4.3.4 快速查看窗口 62
4.3.5 内存查看窗口 62
4.3.6 寄存器窗口 62
4.3.7 调用堆栈窗口 63
4.4 其他调试技术 63
4.4.1 TRACE宏 63
4.4.2 ASSERT宏 64
4.4.3 VERIFY宏 64
4.5 小结 64
第二篇 Windows编程
第5章 Windows程序设计 66
5.1 Windows编程简介 66
5.1.1 Windows API概述 66
5.1.2 Windows应用程序中的常用术语 69
5.2 Windows应用程序运行机制 71
5.2.1 生成Windows应用程序框架 71
5.2.2 在Windows应用程序中添加代码 71
5.2.3 编译并执行程序 74
5.3 程序入口:WinMain()函数 74
5.3.1 WinMain()函数的定义 75
5.3.2 定义和注册窗口类 76
5.3.3 创建窗口 77
5.3.4 显示和更新窗口 78
5.3.5 消息循环 78
5.4 窗口过程函数和消息处理 80
5.4.1 窗口过程函数 80
5.4.2 常用消息的处理 82
5.5 小结 84
第6章 MFC编程概述 85
6.1 MFC概述 85
6.1.1 MFC设计原理 85
6.1.2 MFC特点 86
6.1.3 MFC AppWizard向导 86
6.2 MFC层次结构设计 88
6.2.1 单文档应用程序的构成 88
6.2.2 CObject类 90
6.2.3 CCmdTarget类 90
6.2.4 应用和线程类 91
6.2.5 窗口类 91
6.2.6 文档视图类 92
6.3 MFC框架程序分析 92
6.3.1 theApp全局对象 93
6.3.2 WinMain()函数 95
6.3.3 AfxWinInit()函数 96
6.3.4 InitApplication()函数 97
6.3.5 InitInstance()函数 98
6.3.6 LoadFrame()函数 102
6.3.7 Run()函数 105
6.3.8 终止应用程序 107
6.4 小结 107
第7章 MFC消息映射与消息传递机制 108
7.1 消息概述 108
7.1.1 队列消息和非队列消息 108
7.1.2 系统消息和应用程序消息 109
7.1.3 窗口消息、命令消息和控件通知 109
7.2 MFC消息映射机制 110
7.2.1 MFC消息处理 111
7.2.2 一个应用程序的消息映射分析 111
7.2.3 MFC消息映射的实现方法 113
7.2.4 消息映射宏的种类 116
7.3 小结 117
第8章 图形编程 118
8.1 绘制图形的相关知识 118
8.1.1 图形设备接口 118
8.1.2 逻辑空间和设备空间 119
8.1.3 设备环境 119
8.1.4 一个简单的图形程序 119
8.2 设备环境的相关类 121
8.2.1 CDC类 121
8.2.2 CPaintDC类 123
8.2.3 CClientDC类 125
8.2.4 CWindowDC类 126
8.3 GDI对象 127
8.3.1 GDI对象的种类 127
8.3.2 GDI对象的生命周期 127
8.4 绘制图形 129
8.4.1 绘制线条 130
8.4.2 绘制矩形 131
8.4.3 绘制椭圆 132
8.4.4 其他绘图方式 133
8.5 映射模式 136
8.5.1 坐标转换 136
8.5.2 映射模式 140
8.6 文本编程 142
8.6.1 插入符 142
8.6.2 文本的输入与显示 144
8.7 滚动视窗 149
8.7.1 滚动条 149
8.7.2 滚动视窗应用实例 150
8.8 小结 154
第9章 位图编程 155
9.1 位图的种类 155
9.2 位图的显示 156
9.2.1 创建位图对象 156
9.2.2 加载和设置位图内容 157
9.2.3 显示位图 159
9.2.4 创建一个动画实例 160
9.3 调色板 164
9.3.1 调色板的种类 164
9.3.2 调色板的操作 164
9.3.3 调色板的事件 166
9.4 设备无关类位图 167
9.4.1 BMP图像文件的结构 167
9.4.2 位图操作 169
9.4.3 CImage类 172
9.5 小结 174
第10章 对话框 175
10.1 控件 175
10.1.1 常用控件介绍 175
10.1.2 控件的创建 176
10.1.3 控件的消息 178
10.2 对话框的创建 181
10.2.1 模态对话框的创建 181
10.2.2 非模态对话框的创建 184
10.3 对话框数据交换和验证 186
10.3.1 数据交换 186
10.3.2 数据验证 189
10.3.3 创建一个图形显示实例 190
10.4 树形视图和列表视图控件 193
10.4.1 树形视图控件 193
10.4.2 列表视图控件 195
10.4.3 创建一个通讯录实例 198
10.5 属性表单和向导的创建 201
10.5.1 创建属性页 201
10.5.2 创建属性表单 203
10.5.3 创建向导 205
10.5.4 创建一个可动态添加记录的通讯录 209
10.6 小结 213
第11章 应用程序界面的定制 214
11.1 自定义应用程序的窗口界面 214
11.2 菜单 217
11.2.1 菜单的创建 217
11.2.2 MFC中的菜单消息 218
11.2.3 快捷菜单 220
11.2.4 动态更改菜单 222
11.2.5 手工添加菜单的消息响应 225
11.3 工具栏 226
11.3.1 在工具栏上更改按钮 227
11.3.2 创建和初始化工具栏 227
11.4 状态栏 230
11.4.1 状态栏的创建 230
11.4.2 在状态栏上显示系统时间 232
11.5 小结 234
第12章 文件操作 235
12.1 API文件操作 235
12.1.1 文件的创建和打开 235
12.1.2 文件的读写 236
12.1.3 文件的读写实例 238
12.1.4 其他文件操作 240
12.2 MFC文件操作 241
12.2.1 CFile类简介 241
12.2.2 文件的读写 243
12.2.3 CFileDialog类 244
12.2.4 其他文件操作 247
12.3 小结 249
第13章 文档、视图和框架 250
13.1 文档/视图简介 250
13.1.1 文档/视图的基本概念 250
13.1.2 两类文档/视图结构分析 251
13.2 框架 255
13.2.1 框架窗口的组成 255
13.2.2 多文档框架类中的常用函数 258
13.3 文档 260
13.3.1 对视图的管理 260
13.3.2 新建或打开文档 262
13.3.3 文档的保存和关闭 264
13.4 视图 264
13.4.1 CView类 265
13.4.2 视图对象的创建 267
13.5 分割式窗口 269
13.5.1 创建静态分割窗口 270
13.5.2 创建动态分割窗口 274
13.6 文档与串行化 276
13.6.1 CArchive类和CFile类 276
13.6.2 文档串行化 278
13.6.3 类串行化 279
13.6.4 串行化实例 280
13.7 小结 284
第14章 进程和线程 285
14.1 进程和线程的基本概念 285
14.1.1 进程 285
14.1.2 线程 287
14.2 Win32的进程处理 287
14.2.1 进程的创建和终止 287
14.2.2 进程的终止 289
14.2.3 进程信息的获取 289
14.2.4 子进程的创建 291
14.3 Win32的线程处理 293
14.3.1 线程的创建 293
14.3.2 线程的终止 294
14.3.3 线程的优先级别 294
14.3.4 多线程实例 295
14.4 MFC的线程处理 301
14.4.1 线程的创建与终止 302
14.4.2 线程的消息循环 304
14.5 线程同步 305
14.5.1 同步对象 306
14.5.2 多个同步对象的应用 311
14.6 小结 314
第三篇 数据库编程
第15章 Visual C++数据库 开发技术概述 316
15.1 Visual C++数据库开发特点 316
15.2 Visual C++中的数据库开发技术 317
15.2.1 ODBC API技术 317
15.2.2 MFC ODBC技术 317
15.2.3 DAO技术 317
15.2.4 OLE DB技术 317
15.2.5 ADO技术 318
15.3 小结 318
第16章 ODBC API编程 319
16.1 ODBC简介 319
16.2 使用ODBC API进行数据库开发 319
16.2.1 创建ODBC数据源 320
16.2.2 分配环境句柄 321
16.2.3 分配连接句柄 321
16.2.4 使用SQLConnect连接数据源 322
16.2.5 使用SQLDriveConnect连接数据源 323
16.2.6 使用SQLBrowseConnect连接数据源 325
16.2.7 准备并执行SQL操作 327
16.2.8 获取结果集 327
16.2.9 断开数据源连接并释放环境句柄 329
16.3 使用ODBC API实现通讯录 329
16.3.1 数据库设计 329
16.3.2 添加数据源 330
16.3.3 界面设计 330
16.3.4 创建工程 330
16.3.5 添加类 331
16.3.6 创建数据库操作类 333
16.3.7 系统主界面 336
16.3.8 显示联系人信息 338
16.3.9 删除联系人信息 339
16.3.10 添加联系人信息 340
16.3.11 修改联系人信息 341
16.4 小结 341
第17章 MFC ODBC编程 342
17.1 MFC ODBC简介 342
17.2 CDatabase类 342
17.2.1 连接数据源 343
17.2.2 执行SQL语句 344
17.2.3 事务处理 344
17.2.4 断开数据源连接 345
17.3 CRecordSet类 345
17.3.1 记录集的分类 345
17.3.2 记录字段交换(RFX) 346
17.3.3 创建记录集类 346
17.3.4 记录集类成员变量 347
17.3.5 打开、关闭记录集 348
17.3.6 在记录集中滚动 348
17.3.7 添加记录 349
17.3.8 修改记录 350
17.3.9 删除记录 350
17.4 使用MFC ODBC实现通讯录 350
17.4.1 创建工程 351
17.4.2 系统主界面 352
17.4.3 显示联系人信息 354
17.4.4 删除联系人信息 355
17.4.5 添加联系人信息 356
17.4.6 修改联系人信息 358
17.5 小结 359
第18章 MFC DAO编程 360
18.1 DAO简介 360
18.1.1 DAO内部结构 360
18.1.2 MFC与DAO 361
18.2 CDaoWorkspace类 362
18.2.1 CDaoWorkspace类简介 362
18.2.2 CDaoWorkspace类数据成员 363
18.2.3 显示打开工作区 363
18.2.4 CDaoWorkspace类常用函数 364
18.3 CDaoDatabase类 365
18.3.1 CDaoDatabase类简介 365
18.3.2 CDaoDatabase类数据成员 365
18.3.3 新建数据库 365
18.3.4 打开数据库 367
18.3.5 关闭数据库 368
18.3.6 CDaoDatabase类常用函数 368
18.4 CDaoRecordset类 369
18.4.1 CDaoRecordset类简介 369
18.4.2 CDaoRecordset类数据成员 370
18.4.3 新建记录集 370
18.4.4 添加记录 371
18.4.5 修改记录 373
18.4.6 删除记录 374
18.4.7 CDaoRecordset类常用函数 376
18.5 使用MFC DAO实现通讯录 377
18.5.1 创建工程 377
18.5.2 添加CDaoRecordset类 378
18.5.3 系统主界面 379
18.5.4 显示联系人信息 381
18.5.5 删除联系人信息 382
18.5.6 添加联系人信息 384
18.5.7 修改联系人信息 385
18.6 小结 386
第19章 OLE DB编程 387
19.1 OLE DB简介 387
19.1.1 通用数据访问 387
19.1.2 OLE DB的结构 388
19.1.3 OLE DB 模板、属性 388
19.2 开发ATL OLE DB应用程序 389
19.2.1 创建应用程序架构 389
19.2.2 添加对客户模板的支持 389
19.2.3 修改CLinkInfo类 390
19.2.4 系统主界面 392
19.2.5 显示联系人信息 394
19.2.6 删除联系人信息 394
19.2.7 添加联系人信息 395
19.2.8 修改联系人信息 396
19.3 小结 397
第20章 ADO编程 398
20.1 ADO简介 398
20.1.1 ADO 对象模型 398
20.1.2 Connection对象 399
20.1.3 Command对象 399
20.1.4 Recordset对象 400
20.1.5 Parameter对象 402
20.1.6 Field对象 402
20.1.7 Property对象 403
20.1.8 Error对象 403
20.1.9 开发ADO应用程序的方法 404
20.2 使用ActiveX控件开发ADO应用程序 404
20.2.1 创建工程 404
20.2.2 添加ADO的ActiveX控件 405
20.2.3 添加DataGrid控件 406
20.2.4 运行程序 407
20.3 使用ADO对象控件开发应用程序 407
20.3.1 引入ADO库文件 408
20.3.2 初始化COM环境 408
20.3.3 ADO智能指针 408
20.3.4 连接数据库 409
20.3.5 打开记录集 410
20.3.6 在记录集中移动 411
20.3.7 访问记录集中的数据 411
20.4 使用ADO实现通讯录 413
20.4.1 创建工程 413
20.4.2 系统主界面 413
20.4.3 显示联系人信息 415
20.4.4 删除联系人信息 417
20.4.5 添加联系人信息 419
20.4.6 修改联系人信息 420
20.5 小结 421
第四篇 网络通信编程
第21章 Visual C++网络编程基础 424
21.1 网络协议 424
21.1.1 OSI参考模型 424
21.1.2 TCP/IP参考模型 425
21.2 网络编程相关概念 426
21.2.1 客户机/服务器模式 426
21.2.2 套接字 426
21.2.3 网络字节顺序 426
21.2.4 半相关与全相关 427
21.3 Visual C++对网络编程的支持 427
21.3.1 Windows Socket API 427
21.3.2 MFC WinSock类 427
21.3.3 WinInet支持 428
21.3.4 MAPI支持 428
21.3.5 ISAPI支持 428
21.4 小结 429
第22章 Windows Socket API编程 430
22.1 Windows Sockets概述 430
22.1.1 Windows Sockets的发展 430
22.1.2 Windows Sockets的类型 431
22.1.3 Windows Sockets扩展 431
22.1.4 套接字编程模型 432
22.2 Windows Socket API主要函数 433
22.2.1 初始化WinSock 434
22.2.2 创建套接字 434
22.2.3 绑定地址 435
22.2.4 将套接字设置为监听状态 436
22.2.5 发送连接请求 437
22.2.6 接受连接请求 438
22.2.7 发送数据 439
22.2.8 接收数据 439
22.2.9 关闭套接字 440
22.2.10 关闭加载的套接字库 440
22.2.11 确定套接字状态 440
22.3 Windows Socket API编程步骤 441
22.3.1 引入所需文件 441
22.3.2 服务器端编程 442
22.3.3 客户端编程 443
22.4 基于WinSock的简单聊天室的实现 444
22.4.1 系统总体设计 444
22.4.2 创建服务器端工程 445
22.4.3 添加服务器端代码 446
22.4.4 服务器线程 448
22.4.5 创建客户端工程 449
22.4.6 添加客户端代码 449
22.4.7 客户端线程 450
22.5 小结 451
第23章 MFC Socket编程 452
23.1 CAsyncSocket类 452
23.1.1 成员变量和构造函数 452
23.1.2 绑定地址 453
23.1.3 将套接字设置为监听状态 454
23.1.4 发送连接请求 455
23.1.5 接受连接请求 456
23.1.6 控制套接字模式 457
23.1.7 发送数据 457
23.1.8 接收数据 459
23.1.9 断开数据传输 461
23.1.10 关闭套接字 461
23.1.11 网络事件处理 462
23.1.12 属性函数 462
23.1.13 消息处理函数 466
23.2 CSocket类 467
23.2.1 构造函数 467
23.2.2 属性函数 468
23.2.3 操作函数 469
23.2.4 消息处理函数 469
23.3 编程模型 469
23.3.1 CAsyncSocket类编程模型 469
23.3.2 CSocket类编程模型 470
23.4 利用CSocket类实现文件传输 471
23.4.1 系统总体设计 471
23.4.2 创建工程 472
23.4.3 发送程序代码 472
23.4.4 接收程序代码 474
23.5 小结 476
第24章 WinInet编程 477
24.1 WinInet API简介 477
24.1.1 通用WinInet API函数 477
24.1.2 HTTP函数 478
24.1.3 FTP函数 479
24.1.4 Gopher函数 480
24.2 MFC WinInet类 480
24.2.1 CInternetSession类 480
24.2.2 CInternetConnection类 482
24.2.3 CHttpConnection类 483
24.2.4 CFtpConnection类 484
24.2.5 CGopherConnection类 485
24.2.6 CInternetFile类 486
24.2.7 CHttpFile类 487
24.2.8 CGopherFile类 489
24.2.9 CFileFind类 489
24.2.10 CFtpFileFind类 490
24.2.11 CGopherFileFind类 491
24.2.12 CGopherLocator类 492
24.2.13 CInternetException类 492
24.3 用WinInet类进行编程 492
24.3.1 HTTP客户端编程步骤 493
24.3.2 FTP客户端编程步骤 494
24.3.3 Gopher客户端编程步骤 495
24.4 利用WinInet类实现FTP客户端 495
24.4.1 系统总体设计 495
24.4.2 创建工程 496
24.4.3 连接FTP服务器 497
24.4.4 获取当前目录所有文件 498
24.4.5 返回上级目录 498
24.4.6 下载文件 499
24.4.7 上传文件 500
24.5 小结 500
第五篇 Windows组件编程
第25章 编写动态链接库 502
25.1 动态链接库简介 502
25.1.1 静态链接与动态链接 502
25.1.2 动态链接库的优点 503
25.2 创建动态链接库 503
25.2.1 创建工程 503
25.2.2 添加代码 504
25.2.3 从DLL导出 505
25.2.4 函数匹配 507
25.2.5 DLL入口函数 507
25.3 使用动态链接库 508
25.3.1 一个使用DLL的例子 508
25.3.2 隐式调用和显式调用 509
25.4 动态链接库实例——读写配置文件 510
25.4.1 创建工程 510
25.4.2 设置头文件 511
25.4.3 读取一行数据 512
25.4.4 设置一行数据 513
25.4.5 读取多行数据 514
25.4.6 设置多行数据 515
25.5 小结 517
第26章 使用与编写ActiveX控件 518
26.1 ActiveX控件简介 518
26.1.1 ActiveX控件的发展 518
26.1.2 ActiveX控件属性、事件和方法 519
26.1.3 MFC对ActiveX控件的支持 520
26.2 使用ActiveX控件 520
26.2.1 浏览ActiveX控件 520
26.2.2 在工程中添加ActiveX控件 521
26.2.3 设置ActiveX控件属性 522
26.2.4 使用ActiveX控件类 522
26.3 编写ActiveX控件 523
26.3.1 创建ActiveX工程 523
26.3.2 绘制控件 526
26.3.3 添加控件属性 527
26.3.4 添加控件方法 528
26.3.5 添加控件事件 528
26.3.6 注册ActiveX控件 529
26.3.7 测试ActiveX控件 531
26.4 小结 532
第六篇 综合实例
第27章 人事管理系统的设计与实现 534
27.1 系统总体设计 534
27.1.1 系统功能 534
27.1.2 数据库设计 535
27.2 系统的实现 537
27.2.1 创建工程 537
27.2.2 应用程序主框架 538
27.2.3 连接、断开数据库 539
27.2.4 用户登录模块 540
27.2.5 系统主界面 541
27.2.6 添加新员工模块 542
27.2.7 修改员工信息模块 545
27.2.8 出勤记录管理模块 550
27.2.9 请假记录管理模块 554
27.2.10 加班记录管理模块 558
27.2.11 出差记录管理模块 562
27.3 小结 566
第28章 聊天室的设计与实现 567
28.1 聊天室程序功能说明 567
28.1.1 服务器端功能介绍 567
28.1.2 客户端功能介绍 567
28.1.3 消息类的定义 568
28.2 服务器端应用程序 569
28.2.1 建立服务器应用程序框架 569
28.2.2 侦听套接字类 570
28.2.3 客户套接字类 571
28.2.4 服务器主界面类 573
28.3 客户端应用程序 575
28.3.1 客户端套接字类 576
28.3.2 客户端主界面类 576
28.4 小结 580

IPB ImageIPB ImageIPB ImageIPB ImageIPB Image

正在读取……

这里是其它用户补充的资源(我也要补充):

zhangqinyiok 2010/11/18 14:28:40 补充
—————————————————————————————————————————这个是这本书的PDF格式电子书,是扫描的,不是高清的

该内容尚未提供权利证明,无法提供下载。
正在加载,请稍等...

点击查看所有64网友评论

 

(?) [公告]留口水、评论相关规则 | [活动]每日签到 轻松领取电驴经验

    小贴士:
  1. 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  2. 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  3. 勿催片。请相信驴友们对分享是富有激情的,如果确有更新版本,您一定能搜索到。
  4. 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
  5. 如果您发现自己的评论不见了,请参考以上4条。