第一章 前言... 1
1 文档约定... 9
2 常用术语和缩写... 9
2.1 MSDN.. 9
2.1.1 微软知识库... 9
2.1.2 MSDN杂志/MSJ. 10
2.1.2.1 C++Q&A. 10
2.1.2.2 Win32Q&A. 10
2.1.2.3 Ask Dr. GUI 10
2.1.2.4 Microsoft Interactive Developer. 10
2.1.3 平台SDK. 10
2.1.3.1 头文件和库文件... 10
2.1.3.2 文档... 10
2.2 SDK. 10
2.3 API 10
2.4 DLL. 11
2.5 GDI 11
2.6 DirectX.. 11
2.7 COM.. 12
2.8 OLE. 13
2.9 ActiveX.. 13
2.10 CRT. 13
2.11 MFC. 13
2.11.1 MFC技术文档... 13
2.12 ATL. 13
2.13 STL. 13
2.14 ODBC (Open DataBase Connectivity) 14
2.15 DAO (Data Access Object) 14
2.16 OLE DB(Object Link and Embedding DataBase) 14
2.17 ADO(ActiveX Data Object) 14
2.18 钩子(HOOK):... 15
第二章 C语言和CRT. 15
1 如何生成指定范围内的字符串... 15
2 如何把阳历日期转化成农历... 15
3 如何从字符串中按分隔符提取字符串... 15
4 如何初始化一个GUID数组?... 15
5 如何对一个数组进行快速排序... 16
6 为什么析构函数总是虚函数?如果这是必要的,那么为什么C++不把虚析构函数直接作为默认值?为什么纯虚析构函数可以通过编译,但是不能通过连接?... 18
7 为什么一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系? 18
第三章 平台SDK. 20
1 基本服务... 20
1.1 调试和错误处理... 20
1.1.1 获得错误代码对应的文字信息... 20
1.1.2 怎么知道是哪一行造成程序崩溃?... 20
1.1.3 我安装了我的Windows版本对应的调试符号,为什么程序启动时还是报告一些模块的符号没找到? 21
1.2 DLL,进程和线程... 21
1.2.1 DLL/Hook. 21
1.2.1.1 使用共享数据段... 21
1.2.1.2 创建资源动态库... 22
1.2.1.3 创建MFC扩展动态库... 22
1.2.1.4 为什么MFC扩展库中的代码错误地载入了应用程序的资源... 22
1.2.1.5 在MFC动态库中导出函数... 22
1.2.1.6 如何在MFC常规DLL中使用MFC扩展DLL. 22
1.2.1.7 为什么MFC常规DLL中创建对话框会有ASSERT. 22
1.2.1.8 为什么在DLL初始化时不能创建MFC线程... 22
1.2.1.9 Mutual Imports. 22
1.2.1.10 怎样调整DLL加载时间... 22
1.2.1.11 调试全局Hook. 23
1.2.1.12 怎样才能在进程列表中隐藏当前进程... 23
1.2.1.13 组件/DLL中创建非模态对话框不能处理某些键... 23
1.2.2 进程... 25
1.2.2.1 如何限制应用程序的实例?... 25
1.2.2.2 如何处理MFC应用程序的命令行... 26
1.2.2.3 如何获得一个进程的主窗口... 26
1.2.3 线程... 26
1.2.3.1 如何更改MFC主线程的主窗口... 26
1.2.3.2 如何安全地终止其他线程?... 26
1.2.3.3 为什么在线程中使用MFC对象会断言失败然后崩溃?... 26
1.2.3.4 如何创建线程池?... 26
1.3 文件存储... 26
1.3.1 我应该把我的应用程序的设置放在什么目录?. 26
1.3.2 如何获得系统目录的路径?... 26
1.3.3 如何获得相对于应用程序的路径?... 26
1.3.4 如何判断一个目录是否存在?如何确保一个目录存在?... 26
1.4 硬件... 26
1.5 帮助... 26
1.6 国际化... 26
1.7 跨进程通讯... 27
1.8 内存管理... 27
1.9 性能监视... 27
1.10 终端服务... 27
1.11 Windows系统信息... 27
2 组件服务... 27
2.1 COM.. 27
2.1.1 OLE和数据传递... 27
2.1.2 控件及其属性页... 27
2.1.2.1 用程序注册/注销ActiveX控件... 27
2.1.2.2 多属性页控件... 27
2.1.2.3 属性页中如何访问控件... 29
2.1.2.4 枚举系统中注册的ActiveX控件... 29
2.1.2.5 不使用MFC/ATL等ActiveX框架创建ActiveX控件... 29
2.1.2.6 在控件中集成文档/视图/框架... 30
2.1.2.7 多线程和触发控件事件的问题... 30
2.1.2.8 控件中的键盘、工具栏和工具提示的问题... 30
2.1.2.9 控件的字体和图像属性... 30
2.1.2.10 控件中包含对话框/控件... 30
2.1.2.11 编辑FlexGrid控件的单元格... 30
2.1.2.12 自定义FlexGrid控件的外观... 30
2.1.2.13 用VB还是VC来写控件... 30
2.1.2.14 在控件方法参数中传递数组... 30
2.1.2.15 在参数中传递自动化对象... 31
2.1.2.16 枚举容器中的OLE对象... 31
2.1.2.17 控件访问容器的HTML文档或者Office文档... 31
2.1.2.18 控件中内嵌Office文档... 31
2.1.2.19 控件中创建弹出式工具栏... 31
2.1.3 结构化存储... 31
2.1.3.1 如何获得Office文档的属性... 31
2.1.4 自动化... 31
2.1.4.1 数据类型转换... 31
2.1.4.2 自动化Office. 31
2.1.4.3 给自己的应用程序添加宏支持... 32
2.1.4.4 给现存类添加自动化支持... 32
2.1.4.5 重载现存类的自动化支持... 32
2.1.4.6 在自动化客户端捕获事件... 32
3 数据服务... 32
3.1 MDAC. 32
3.1.1 ADO.. 32
3.1.1.1 如何编程创建、压缩和修复数据库... 32
3.1.1.2 使用GUID字段... 32
3.1.1.3 同时用#import导入ADO和ADOX出现符号重复定义错误... 32
3.1.2 OLEDB. 33
3.1.3 ODBC. 33
3.1.3.1 编程配置数据源... 33
3.1.3.2 编程创建、压缩和修复数据库... 33
3.1.4 DAO.. 33
3.1.4.1 为什么VC6不能打开Access2000数据库... 33
3.1.4.2 DAO的局限... 33
3.1.4.3 DAO拥有ADOADOxJRO所没有的东西(也许从不会有!)... 33
3.1.4.4 编程创建、压缩和修复数据库... 33
3.1.4.5 MFC的DAO类和字符串参数... 33
3.1.4.6 DAO和多线程... 33
3.1.4.7 DAO和动态库... 33
3.1.4.8 DAO和Excel 33
3.2 XML. 34
3.2.1 XML. 34
3.2.1.1 如何让MSXML DOM输出的XML可以缩进和换行... 34
3.2.1.2 为什么我从网络上加载XML的时候返回成功,但DOM中无任何内容? 34
3.2.2 XSLT. 34
3.2.3 SAX.. 34
3.2.3.1 SAX和XMLDOM的区别... 34
3.3 Jet 34
3.3.1 为什么我的Access数据库会损坏... 34
4 图形和多媒体... 34
4.1 DirectX.. 34
4.2 GDI+. 34
4.3 OPENGL. 34
4.4 Windows GDI 34
4.4.1 如何提高屏幕录制程序的性能... 35
4.4.2 如何在应用程序中使用皮肤功能... 35
4.5 Windows Media. 35
4.6 Windows MutiMedia. 35
5 网络和合作... 35
5.1 CDO.. 35
5.1.1 创建MHT格式的文档... 35
5.2 MAPI 35
5.3 NetMeeting. 35
6 安全... 35
7 安装和系统维护... 35
7.1 安装程序... 35
7.1.1 如何在InstallShield中使用自己写的动态库... 35
7.2 发布模块... 35
7.2.1 VC. 35
7.2.1.1 VC运行时刻库... 36
7.2.1.2 MFC. 36
7.2.1.3 ATL. 36
7.2.2 ADO.. 36
7.2.3 JET/DAO.. 36
7.2.4 DirectX.. 36
7.2.5 GDI+. 36
7.2.6 XML. 36
7.2.7 IE. 36
7.2.8 ActiveX控件... 36
7.2.9 Windows Media Format 37
7.3 Windows管理工具... 37
8 脚本支持... 37
9 用户界面... 37
9.1 通用控件... 37
9.1.1 编辑控件... 37
9.1.1.1 修改背景色... 37
9.1.1.2 编写半透明的RichEdit控件... 37
9.1.1.3 用RichEdit控件插入OLE对象和图片到RTF文档,并且自定义插入之后的外观 37
9.1.2 列表控件... 37
9.1.2.1 使用虚列表优化显示性能... 37
9.1.2.2 编辑列表内容... 37
9.1.2.3 选择列... 37
9.1.2.4 为什么不能处理列表中的标题控件的消息... 37
9.1.2.5 为什么列表中设置的定时器会消失... 37
9.1.2.6 如何对列表的内容进行排序... 38
9.1.2.7 如何启用整行选择... 38
9.1.3 树控件... 38
9.1.3.1 动态显示项目的内容... 38
9.1.3.2 保存树的状态... 38
9.1.3.3 自定义外观... 38
9.1.4 组合框控件... 38
9.1.4.1 如何控制组合框中的编辑控件和下拉列表... 38
9.1.4.2 如何动态修改组合框的下拉列表的宽度... 38
9.1.5 控制栏... 38
9.1.5.1 在文档/视图的成员函数中如何访问控制栏... 38
9.1.5.2 在控制栏上指定区域创建和控制通用控件... 38
9.1.5.3 对话栏中的控件... 39
9.1.5.4 在对话框中使用控制栏... 39
9.1.5.5 工具栏中添加文字... 39
9.1.5.6 自定义工具栏... 39
9.1.6 属性表/属性页/标签控件... 39
9.1.6.1 如何去掉帮助按钮... 39
9.1.6.2 如何创建标签视图... 39
9.1.6.3 如何创建一个可以改变大小的属性表... 39
9.1.6.4 如何修改背景色... 39
9.1.7 日期时间选择控件... 39
9.1.7.1 如何设置一个空的时间为初始值... 39
9.1.8 滚动条... 39
9.1.8.1 如何自定义窗口内建的滚动条的外观?... 39
9.1.8.2 为什么类向导没有和滚动条控件关联的事件?... 39
9.1.9 工具提示控件... 39
9.1.9.1 如何为一个窗口添加工具提示?... 40
9.1.10 切分窗口... 40
9.1.10.1 如何在对话框中使用切分窗口?... 40
9.1.10.2 如何在切分窗口中放置非视图窗口... 40
9.1.10.3 如何动态修改切分窗口的行数和列数、... 40
9.1.11 自定义通用控件的外观... 40
9.1.11.1 通用控件中的内建支持... 40
9.1.11.2 处理WM_PAINT. 40
9.1.11.3 处理WM_DRAWITEM.. 40
9.1.11.4 处理WM_CTLCOLOR. 40
9.1.11.5 处理NM_CUSTOMDRAW.. 40
9.1.11.6 处理内嵌的控件和滚动条... 40
9.1.11.7 使用无窗口模式的RichEdit控件... 41
9.2 Windows Shell 41
9.2.1 如何执行外壳命令... 41
9.2.2 如何在应用程序中嵌入外壳视图... 42
9.2.2.1 从文件中获取显示信息... 42
9.2.2.2 获得和修改文件相关的上下文菜单... 42
9.2.2.3 访问Windows内建文件/目录对话框的外壳视图... 42
9.2.2.4 显示文件的属性... 42
9.2.3 如何修改任务栏... 42
9.2.4 如何执行复制、删除、移动等操作... 42
9.2.5 如何使用系统的进度对话框... 44
9.2.6 如何把应用程序最小化到系统托盘... 44
9.2.7 如何在应用程序中集成自动完成功能... 44
9.2.8 如何在任务栏的状态区域显示提示信息以及播放声音... 44
9.2.9 如何控制活动桌面... 45
9.2.10 如何启动并且控制一个资源管理器... 45
9.2.11 如何编写桌面栏/浏览器栏... 45
9.2.12 如何编写外壳扩展程序... 45
9.3 用户输入... 46
9.3.1 通用对话框... 46
9.3.1.1 怎样更改文件对话框的背景... 46
9.3.1.2 怎样在文件打开对话框中自定义过滤文件的方法... 46
9.3.2 加速键... 46
9.3.3 键盘... 46
9.3.4 鼠标... 46
9.3.5 辅助功能... 46
9.3.6 窗口... 46
9.3.6.1 对话框... 46
9.3.6.2 Hook. 47
9.3.6.3 消息和消息序列... 47
9.3.6.4 多文档界面... 47
9.3.6.5 定时器... 47
9.3.6.6 窗口类... 47
9.3.6.7 窗口过程... 47
9.3.6.8 窗口属性... 47
9.3.6.9 窗口站和桌面... 47
10 Web开发... 47
10.1 Internet客户端开发... 47
10.1.1 浏览器提供的服务... 47
10.1.1.1 超链接... 47
10.1.1.2 多语言... 48
10.1.2 浏览器和控件... 48
10.1.2.1 安全地初始化控件... 48
10.1.2.2 控件获得网页地址... 48
10.1.2.3 控件访问DHTML对象模型... 48
10.1.2.4 控件检测浏览的停止... 48
10.1.2.5 控件的创建和销毁... 48
10.1.2.6 浏览器控件中的键盘问题... 48
10.2 DHTML对象模型... 49
10.2.1 提交表单... 49
10.2.2 动态内容... 49
10.2.3 脚本和VC代码的转换... 49
10.3 浏览器编程... 49
10.3.1 自动化浏览器... 49
10.3.2 集成浏览器控件... 49
10.3.3 处理浏览器事件... 49
10.3.4 处理页面元素事件... 49
10.3.5 自定义安全管理器... 50
10.3.6 处理脚本错误... 50
10.3.7 自定义打印... 50
10.3.8 控制浏览器控件的外观和行为... 50
10.3.9 访问DHTML对象模型... 50
10.3.10 浏览器控件... 50
10.4 HTML编辑... 51
10.5 自定义协议... 51
10.6 Internet区域... 51
10.7 Win32 Internet函数... 51
10.7.1 使用WinHttpAPI提交表单... 51
11 类库支持... 51
11.1 MFC中的HTML类... 51
11.1.1 CHTMLView 有内存泄漏吗?... 51
12 Windows API 51
12.1 字符串... 51
12.1.1 字符串转换... 51
12.1.2 枚举计算机上的代码页... 52
12.1.3 窗口... 52
12.1.3.1 如何编写一个全屏的程序?... 52
12.2 辅助功能... 52
12.2.1 屏幕取词... 52
第四章 常见类库... 52
1.1 ATLMFC. 52
1.1.1 添加支持... 52
1.1.1.1 怎么在ATL工程中引入MFC支持?... 52
1.1.1.2 怎么在MFC工程中引入ATL支持?... 52
1.1.2 MFC的文档视图框架... 53
1.1.2.1 如何提供多视图显示... 53
1.1.2.2 如何编程创建一个框架... 53
1.1.2.3 如何激活一个文档模板创建的框架?... 53
1.1.2.4 创建MDI子框架的时候使其最大化... 55
1.1.2.5 自定义框架标题... 55
1.1.2.6 自定义框架初始位置和风格... 55
1.1.2.7 如何自定义MDI主框架的客户区域... 56
1.1.2.8 如何动态修改MDI菜单... 56
1.1.2.9 在MDI子窗口之间共享菜单... 56
1.1.2.10 如何遍历所有的MDI子框架... 56
1.1.2.11 框架的创建过程中如何访问文档... 56
1.1.2.12 如何添加自动保存功能... 57
1.1.2.13 如何修改AfxMessageBox的标题... 57
1.1.2.14 如何支持多个扩展名... 57
1.1.2.15 限制某种类型的文档模板创建的框架的数目... 57
1.1.2.16 为什么ProcessMessageFilter没有捕获SendMessage发送的消息... 58
1.1.2.17 为什么会提示“创建空文档”失败信息... 58
1.1.3 命令和消息处理... 58
1.1.3.1 自定义命令处理流程... 58
1.1.3.2 让对话框中的菜单也可以自动更新... 58
1.1.3.3 处理动态创建的控件发送的消息... 58
1.2 WTL. 58
1.3 STL. 59
第五章 VC使用... 59
1 安装... 59
1.1 在终端服务器上安装... 59
1.2 安装最后更新系统时出现不能创建DCOM用户错误... 59
2 我有必要从VC6升级到VC.Net么?... 59
3 扩展... 59
3.1 如何添加自动保存功能... 59
4 编辑... 59
4.1 如何从类向导不支持的类派生一个类... 59
4.2 在VC中使用真彩的资源图片... 59
4.3 智能感知不能工作了!我怎么办... 59
4.4 为什么在创建新的类的时候VC报告该类仍有残余?... 59
4.5 反病毒软件安装之后VC就工作不正常了,有时丢失源文件!... 59
5 编译... 59
5.1 我可以使用VC6来写.Net程序么?... 60
5.2 LNK2001 '_WinMain@16' Unresolved External Symbol 60
6 调试... 60
6.1 本地调试... 60
6.1.1 为什么调试版本的程序运行正常,而发行版本的程序运行崩溃... 60
6.1.2 如何通过崩溃地址找到出错的代码行... 60
6.1.3 如何进行多工程集成调试... 60
6.2 远程调试... 61
6.2.1 如何在另一台计算机上调试?... 61
6.3 在应用程序中增加调试信息... 61
6.3.1 增加编译时输出... 61
6.3.2 增加运行时输出... 61
6.3.2.1 输出到文件... 61
6.3.2.2 输出到调试输出窗口... 61
第六章... 61
第七章 网络资源... 63