本书介绍了在使用Visual C++开发应用程序时所遇到的问题的解决技巧及技巧实现的代码参考。本书共分为13章,内容包括:Visual C++代码的排版,开发环境的设置,数据类型的转换,Visual C++常用控件的使用技巧,对话框处理技巧,窗口和界面处理技巧,文件、文件夹及磁盘操作技巧,数据库操作技巧,进程、线程和DLL操作技巧,多媒体的处理技巧,通信的操作技巧,COM组件技术操作技巧,系统编程等。本书具有实用性强、通俗易懂和注重实践等特点。本书适合Visual C++程序员使用,能够帮助他们解决在实际开发中所遇到的问题,在解决问题时采用了启发式的方式,首先给出了问题的阐述,然后给出问题的解决技巧,最后给出了相关问题解决的实例代码。希望本书能够帮助读者提高解决实际问题的能力,真正做到举一反三。
目录
- 第1章 C++语法及编程技巧 1
- 1.1 C++编程规范和排版技巧 2
- 1.1.1 程序的排版 2
- 1.1.2 添加注释 3
- 1.1.3 命名规则 4
- 1.1.4 复合表达式的书写技巧 5
- 1.1.5 if语句的书写技巧 7
- 1.1.6 循环语句的书写技巧 9
- 1.1.7 循环控制语句 10
- 1.1.8 函数设计的技巧 12
- 1.1.9 宏定义的使用技巧 13
- 1.2 const使用技巧 14
- 1.2.1 const常量 14
- 1.2.2 const在函数中的使用 15
- 1.2.3 const指针 17
- 1.2.4 类const成员变量的初始化 17
- 1.2.5 const与宏常量的区别 19
- 1.3 sizeof使用技巧 19
- 1.3.1 sizeof运算符应用技巧 19
- 1.3.2 sizeof与strlen()的区别 22
- 1.4 函数与预处理技巧 22
- 1.4.1 在C++中调用C编译器的
- 函数 23
- 1.4.2 内联函数和宏的比较 23
-
1.4.3 #include
和 - #include "filename.h"的区别 24
- 1.4.4 回调函数的概念与操作技巧 24
- 1.4.5 函数的调用规范 26
- 1.5 C++数据类型转换技巧 27
- 1.5.1 将字符串转化换为整数 27
- 1.5.2 其他数据类型转换为字符串 28
- 1.5.3 将字符串转化为其他的
- 数据类型 30
- 1.5.4 char*和Cstring的相互转换 31
- 1.5.5 CString与BSTR的相互转换 32
- 1.5.6 BSTR、_bstr_t与CComBSTR
- 的关系 32
- 1.5.7 typedef和typename关键字 33
- 1.5.8 UNICODE的处理技巧 34
- 1.5.9 UNICODE字符串和MBCS
- 字符串的相互转换 35
- 1.5.10 VARIANT的处理技巧 37
- 1.6 内存管理技巧 38
- 1.6.1 内存分配的不同方式 38
- 1.6.2 避免内存泄漏的方法 39
- 1.6.3 数组和指针的区别与
- 处理技巧 43
- 1.6.4 指针和引用的区别 44
- 1.6.5 this指针 45
- 1.6.6 传递动态内存 47
- 1.6.7 杜绝“野”指针 48
- 1.6.8 C++中堆内存操作方法 49
- 1.7 面向对象编程技巧 51
- 1.7.1 struct和class的区别 51
- 1.7.2 构造函数和析构函数 53
- 1.7.3 函数的多态 55
- 1.7.4 重载、覆盖和隐藏的比较 57
- 1.7.5 运算符重载 59
- 第2章 VC开发环境设置和
- 编译调试技巧 67
- 2.1 VC开发环境的设置 68
- 2.1.1 VC++编程快捷键应用技巧 68
- 2.1.2 设置编辑区背景颜色和
- 字体的技巧 69
- 2.1.3 设置显示的最近打开工程、
- 文件的个数的技巧 70
- 2.1.4 设置VC默认头文件和
- 库文件 71
- 2.1.5 引入lib库到工程中 72
- 2.1.6 在工作区(WorkSpaces)
- 中导入多个项目 73
- 2.1.7 ClassView视图 73
- 2.1.8 让控制台应用程序支持
- MFC类库 74
- 2.1.9 快速删除临时文件 74
- 2.1.10 检测程序中的括号是否匹配 75
- 2.1.11 快速找到变量或者函数、
- 宏的定义 75
- 2.1.12 成员变量或函数不能显示
- 提示功能 76
- 2.1.13 VC生成的各种文件的作用 76
- 2.1.14 生成新类到工程中 77
- 2.1.15 添加第三方的类到工程中 77
- 2.1.16 彻底删除工程的类 78
- 2.1.17 改变生成.exe文件的路径 78
- 2.1.18 处理ClassZiard找不到
- 系统消息的技巧 79
- 2.1.19 输出区的“Find in Files 2”
- 属性页 79
- 2.1.20 误删除类向导文件 80
- 2.1.21 发布程序设置 80
- 2.1.22 生成与现有项目除了项目
- 名外完全相同的新项目 81
- 2.2 VC程序调试技巧 83
- 2.2.1 Debug版本和Release版本的
- 区别 83
- 2.2.2 Release版本的调试技巧 84
- 2.2.3 断点调试 85
- 2.2.4 值调试技巧 86
- 2.2.5 Call Stack技巧(调用堆栈
- 调试) 86
- 2.2.6 ASSERT( )调试技巧 86
- 2.2.7 TRACE调试技巧 87
- 2.2.8 Try-Catch的使用技巧 87
- 2.2.9 利用GetLastError()的
- 返回值确定错误信息 88
- 2.2.10 dll工程的调试技巧 88
- 2.2.11 Link2001的常见错误 89
- 2.2.12 VC++的优化技术 90
- 第3章 键盘、鼠标输入处理技巧 93
- 3.1 键盘输入处理技巧 94
- 3.1.1 ASCII码查询器 94
- 3.1.2 虚拟键码和扫描码相互转换 96
- 3.1.3 字符转换为虚拟键码 97
- 3.1.4 模拟键盘特殊组合键输入 98
- 3.1.5 模拟键盘输入特殊字符 100
- 3.1.6 动态改变键盘的状态 102
- 3.1.7 键盘钩子程序的实现 104
- 3.1.8 创建进程外钩子 108
- 3.1.9 安装系统键盘钩子 111
- 3.1.10 如何屏蔽【Alt+Esc】/
- 【Alt+Tab】等组合键 111
- 3.1.11 获得桌面上的正在接收
- 键盘或鼠标输入的窗口的
- HWND 114
- 3.1.12 捕获键盘【Home】等
- 虚拟键 115
- 3.1.13 使用回车键切换输入焦点 116
- 3.2 鼠标输入处理技巧 117
- 3.2.1 随时获得鼠标的窗口位置 117
- 3.2.2 在非客户区响应鼠标消息 118
- 3.2.3 锁定鼠标的活动范围 119
- 3.2.4 不规则窗口随鼠标移动
- 而移动 119
- 3.2.5 检测鼠标是否在任意
- 图形区域内 121
- 3.2.6 SetCapture函数使用技巧 121
- 3.2.7 判断鼠标是否与【Ctrl】键
- 共同操作 123
- 3.2.8 更改程序的默认光标 123
- 3.2.9 隐藏和显示光标 124
- 3.2.10 交换鼠标左右键和恢复 125
- 3.2.11 获取和设置鼠标双击时间 126
- 第4章 常用控件使用技巧 127
- 4.1 Static文本控件使用技巧 128
- 4.1.1 静态控件响应通告消息 128
- 4.1.2 静态文本控件显示 3D文本 129
- 4.1.3 改变静态文本控件背景
- 颜色的技巧 132
- 4.1.4 Static显示图标和位图 133
- 4.1.5 数字时钟 136
- 4.2 Button控件使用技巧 140
- 4.2.1 禁用和启用按钮
- 控件的技巧 141
- 4.2.2 在按钮控件上加载位图的
- 技巧 142
- 4.2.3 改变下压按钮的背景色 143
- 4.2.4 实现XP风格按钮 144
- 4.2.5 实现具有3D动画效果的
- 按扭 148
- 4.3 编辑框(Edit)控件使用技巧 152
- 4.3.1 设置编辑框为只读属性的
- 技巧 152
- 4.3.2 限制编辑控件输入的字符
- 类型的技巧 155
- 4.3.3 防止别人盗取Edit中的*号
- 密码的技巧 156
- 4.4 ListBox控件使用技巧 158
- 4.4.1 向ListBox添加项目的技巧 158
- 4.4.2 从ListBox中删除所选择项的
- 技巧 160
- 4.4.3 获取ListBox控件中所
- 选择项的技巧 161
- 4.4.4 清空ListBox中所有项的
- 技巧 162
- 4.4.5 防止在列表框中添加很多
- 数据出现不停的刷新的技巧 163
- 4.5 ListCtrl控件使用技巧 163
- 4.5.1 设置ListCtrl的背景
- 颜色的技巧 164
- 4.5.2 设置ListCtrl的字体的技巧 164
- 4.5.3 设置ListCtrl具有网格
- 样式的技巧 166
- 4.5.4 设置ListCtrl标题栏的
- 宽度的技巧 167
- 4.5.5 为CListCtrl添加选项的
- 技巧 167
- 4.5.6 使ListCtrl控件项可以
- 进行编辑的技巧 168
- 4.5.7 为CListCtrl控件增加列
- 标题栏的技巧 169
- 4.5.8 实现CListCtrl中的排序
- 问题的技巧 169
- 4.6 树型(TreeCtrl)控件
- 使用技巧 172
- 4.6.1 向TreeCtrl控件添加
- 数据的技巧 172
- 4.6.2 删除树节点的技巧 177
- 4.6.3 查看节点信息的技巧 178
- 4.6.4 树型节点排序技巧 179
- 4.6.5 使TreeCtrl响应鼠标的
- 双击消息的技巧 180
- 4.6.6 实现TreeCtrl节点的
- 自由拖动的技巧 181
- 4.6.7 判断TreeCtrl的某一项
- 被选择的技巧 188
- 4.6.8 给树型控件添加工具条
- 提示的技巧 189
- 4.7 RichEdit控件使用技巧 189
- 4.7.1 CRichEdit控件的应用
- 初始化技巧 190
- 4.7.2 控制RichEdit输入
- 字数的技巧 190
- 4.7.3 设置RichEdit控件不带
- 格式的数据粘贴的技巧 191
- 4.7.4 设置RichEdit控件的
- 自动换行的技巧 192
- 4.7.5 设置RichEdit控件的
- 只读属性的技巧 192
- 4.7.6 设置RichEdit控件的
- 显示字体的技巧 193
- 4.7.7 设置RichEdit控件显示
- 字体的行间距的技巧 194
- 4.8 进度条(ProgressCtrl)控件
- 使用技巧 195
- 4.8.1 动态创建一个进度条的技巧 195
- 4.8.2 进度条的编程技巧 196
- 4.8.3 制作以位图作为进度
- 显示的进度条的技巧 198
- 4.8.4 在状态栏中显示进度条的
- 技巧 202
- 4.9 组合框(ComboBox)控件
- 使用技巧 203
- 4.9.1 添加/删除ComboBox的
- 内容的技巧 203
- 4.9.2 获得ComboBox选择的
- 内容的技巧 204
- 4.10 Scroll Bar控件使用技巧 205
- 4.10.1 动态创建Scroll Bar
- 控件的技巧 205
- 4.10.2 设置Scroll Bar箭头的
- 允许和禁止状态的技巧 206
- 4.11 选项卡(Tab Control)控件
- 使用技巧 206
- 4.11.1 向Tab Control中添加
- 页面的技巧 207
- 4.11.2 获取、设置当前被选中
- 的页位置的技巧 208
- 第5章 对话框技巧 209
- 5.1 通用对话框处理技巧 210
- 5.1.1 “查找和替换”对话框的
- 使用技巧 210
- 5.1.2 “文件保存”对话框的
- 使用技巧 213
- 5.1.3 “打开”对话框的使用技巧 215
- 5.1.4 “另存为”对话框的
- 使用技巧 217
- 5.1.5 “页面设置”对话框的
- 使用技巧 219
- 5.1.6 “颜色”对话框的
- 使用技巧 223
- 5.1.7 “字体”对话框的
- 使用技巧 225
- 5.1.8 “打印”对话框的
- 使用技巧 228
- 5.1.9 “消息”对话框的返回值 232
- 5.2 “模态”对话框使用技巧 233
- 5.2.1 数据交换机制 234
- 5.2.2 更改对话框的背景的技巧 237
- 5.2.3 创建非规则窗体的技巧 239
- 5.2.4 让窗体透明或
- 半透明的技巧 241
- 5.2.5 让窗体在最前端
- 显示的技巧 242
- 5.2.6 改变窗体的显示
- 位置的技巧 243
- 5.2.7 拖动无标题窗口的技巧 244
- 5.2.8 保持窗口大小不变的技巧 244
- 5.2.9 控制对话框内的控件
- Tab Order的技巧 245
- 5.2.10 单击除了窗口标题栏以外的
- 区域使窗口移动的技巧 247
- 5.2.11 屏幕保护程序的制作技巧 248
- 5.3 非模式对话框使用技巧 250
- 5.3.1 非模式对话框的概念与
- 使用技巧 250
- 5.3.2 创建一个非模式对话框的
- 技巧 251
- 5.3.3 销毁非模式对话框的技巧 252
- 5.4 属性页对话框处理技巧 253
- 5.4.1 获得属性表单中当前
- 激活页的索引值的技巧 253
- 5.4.2 获得当前属性页对话框中
- 属性页的个数的技巧 256
- 5.4.3 获得指定索引的属性页的
- 指针的技巧 257
- 5.4.4 获得当前激活的属性页的
- 指针的技巧 257
- 5.4.5 将指定索引号或指针的属性
- 页设置为激活页的技巧 258
- 5.4.6 设置属性表单的标题的技巧 259
- 5.4.7 创建一个一般属性页
- 对话框的技巧 260
- 5.4.8 制作向导对话框的技巧 261
- 第6章 窗口、界面处理技巧 265
- 6.1 框架和视图处理技巧 266
- 6.1.1 分割视图的技巧 266
- 6.1.2 获得各个视图的指针 269
- 6.1.3 通过代码获得主框架的
- 指针 270
- 6.1.4 改变视图的大小 270
- 6.1.5 不让程序自动打开新文档 271
- 6.1.6 使程序启动后就最大化
- 或者最小化显示 271
- 6.1.7 在MDI程序中关闭子窗口
- 同时关闭父窗口 272
- 6.1.8 改变视图的背景颜色 273
- 6.1.9 防止窗口闪烁的方法 274
- 6.1.10 使窗体右上角的系统
- 按钮无效 275
- 6.2 标题栏处理技巧 277
- 6.2.1 获取标题栏的颜色 277
- 6.2.2 设置标题栏的颜色 278
- 6.2.3 获取标题栏的高度 279
- 6.2.4 设置标题栏的文字 280
- 6.3 状态栏处理技巧 282
- 6.3.1 不启动默认状态栏 282
- 6.3.2 获取状态栏的指针 283
- 6.3.3 在状态栏显示鼠标的位置 284
- 6.3.4 在状态栏上显示系统时间 285
- 6.3.5 在状态栏上显示滚动的文本 286
- 6.4 工具栏处理技巧 288
- 6.4.1 不启动默认工具栏 288
- 6.4.2 设置工具栏的标题 289
- 6.4.3 设置工具栏按钮提示 289
- 6.4.4 关闭工具栏按钮提示 290
- 6.4.5 在工具栏增加下拉按扭 291
- 6.4.6 获取工具栏的指针 292
- 6.4.7 在对话框中加载工具栏 293
- 6.4.8 设置工具栏的停靠位置 295
- 6.4.9 工具栏的隐藏 297
- 6.5 菜单处理技巧 298
- 6.5.1 动态修改应用程序的菜单 298
- 6.5.2 为菜单项添加复选标记 300
- 6.5.3 为菜单项添加单选标记 300
- 6.5.4 动态增加和删除
- 系统菜单项 301
- 6.5.5 在对话框类型的应用程序
- 中加载菜单 302
- 6.5.6 右键菜单的弹出 303
- 6.5.7 使菜单项前带图标 304
- 6.5.8 获取菜单栏高度 305
- 6.5.9 获取顶层菜单所占的
- 菜单行数 306
- 6.5.10 显示程序菜单 307
- 6.5.11 隐藏程序菜单 308
- 6.5.12 取消标题栏的鼠标右键
- 系统菜单 309
- 6.5.13 给系统菜单添加一个
- 菜单项 310
- 6.6 光标处理技巧 311
- 6.6.1 光标的设置技巧 311
- 6.6.2 启动和结束一个等待光标 312
- 6.6.3 获取默认光标 313
- 6.6.4 捕捉光标热区 314
- 6.7 图标处理技巧 315
- 6.7.1 获取默认图标的大小 315
- 6.7.2 获取应用程序图标 316
- 6.7.3 设置应用程序图标 318
- 6.7.4 在系统托盘中设置图标 319
- 6.7.5 直接从文件中装入
- 一个图标 321
- 6.7.6 使应用程序标题栏
- 图标旋转 321
- 第7章 文件、文件夹、磁盘
- 操作技巧 325
- 7.1 文件操作技巧 326
- 7.1.1 文件的打开和关闭 326
- 7.1.2 文件的读写 327
- 7.1.3 文件大小的获取 328
- 7.1.4 ini文件的读/写 329
- 7.1.5 串行化读/写二进制文件 331
- 7.1.6 获得文件的属性 334
- 7.1.7 设置文件的属性 336
- 7.1.8 取消文件所有属性 337
- 7.1.9 获取系统所有文件类型 337
- 7.1.10 删除文件 340
- 7.1.11 复制文件 341
- 7.1.12 移动文件 342
- 7.2 文件夹操作技巧 343
- 7.2.1 复制文件夹 343
- 7.2.2 创建文件夹 345
- 7.2.3 删除文件夹 346
- 7.2.4 更名文件夹 346
- 7.2.5 删除多层文件夹 347
- 7.2.6 遍历整个文件夹 349
- 7.2.7 判断文件夹是否存在 350
- 7.2.8 获取Windows和Windows
- 系统目录 351
- 7.2.9 确定应用程序的路径 352
- 7.3 磁盘操作技巧 353
- 7.3.1 获取系统中所有的磁盘 353
- 7.3.2 获取磁盘的容量 354
- 7.3.3 获得磁盘序列号 355
- 7.3.4 获取磁盘的剩余容量 356
- 第8章 数据库操作 359
- 8.1 VC++数据库访问技术 360
- 8.1.1 ODBC(开放式数据库连接)
- 技术 360
- 8.1.2 DAO技术 365
- 8.1.3 OLE DB技术 366
- 8.1.4 ADO技术 373
- 8.2 数据库操作技巧 381
- 8.2.1 SQL Server的安装问题 381
- 8.2.2 调用SQL Server存储过程 381
- 8.2.3 UDL文件的创建和配置 385
- 8.2.4 使用UDL创建ADO的
- 连接 386
- 8.2.5 访问远程SQL Server数据库
- 服务器 387
- 第9章 进程、线程和DLL
- 操作技巧 389
- 9.1 进程的操作技巧 390
- 9.1.1 进程的概念 390
- 9.1.2 创建/终止进程 390
- 9.1.3 获取系统进程的技巧 392
- 9.1.4 终止指定进程的技巧 393
- 9.1.5 使用文件映射机制实现
- 进程间通信的技巧 395
- 9.1.6 使用消息实现进程间通信 397
- 9.1.7 使用共享数据段实现
- 进程间的通信的技巧 400
- 9.1.8 用命名管道实现进程间的
- 通信的技巧 403
- 9.1.9 使用邮槽实现进程间通信的
- 技巧 407
- 9.2 线程的操作技巧 409
- 9.2.1 线程的概念 409
- 9.2.2 创建/终止线程的技巧 409
- 9.2.3 工作线程实现的技巧 411
- 9.2.4 用户界面线程实现的技巧 413
- 9.2.5 使用事件对象完成线程的
- 同步的技巧 414
- 9.2.6 使用信号量完成线程的
- 同步的技巧 416
- 9.2.7 使用互斥量完成线程的
- 同步的技巧 419
- 9.2.8 使用临界量完成线程的
- 同步的技巧 419
- 9.3 DLL的操作技巧 421
- 9.3.1 DLL概念 422
- 9.3.2 DLL调用方式技巧 423
- 9.3.3 _stdcall和_cdecl调用约定 426
- 9.3.4 DLL导出变量的技巧 427
- 9.3.5 DLL中导出类的技巧 427
- 9.3.6 MFC创建动态链接库的
- 技巧 430
- 第10章 多媒体的处理技巧 431
- 10.1 GDI的操作技巧 432
- 10.1.1 GDI基本图形绘制 432
- 10.1.2 填充区域 443
- 10.1.3 输出旋转文字 446
- 10.1.4 输出空心字体 448
- 10.1.5 渐变字体的实现 449
- 10.1.6 防止屏幕闪烁实现技巧 450
- 10.1.7 截屏实现的技巧 452
- 10.2 图像显示技巧 458
- 10.2.1 BMP图片的显示技巧 458
- 10.2.2 JPG/GIF图片的显示技巧 463
- 10.3 声音视频的处理技巧 467
- 10.3.1 播放AVI视频流技巧 467
- 10.3.2 播放WAV视频的技巧 470
- 第11章 通信的操作技巧 475
- 11.1 网络通信编程技巧 476
- 11.1.1 TCP/IP协议 476
- 11.1.2 获取本机的名字的技巧 478
- 11.1.3 获取本机的IP地址的技巧 480
- 11.1.4 获取网卡信息的技巧 482
- 11.1.5 网卡MAC地址的获取的
- 技巧 485
- 11.1.6 获取局域网内机器IP的
- 技巧 489
- 11.1.7 端口状态扫描程序的
- 使用技巧 493
- 11.1.8 发送电子邮件的技巧 495
- 11.1.9 检查电子邮件数量技巧 499
- 11.1.10 实现连接FTP服务器
- 的技巧 506
- 11.1.11 获取FTP服务器的文件
- 列表技巧 509
- 11.1.12 实现向FTP上传
- 文件技巧 513
- 11.1.13 实现从FTP上下载
- 文件技巧 514
- 11.1.14 实现查询FTP站点的
- 技巧 515
- 11.1.15 实现查询HTTP
- 站点的技巧 517
- 11.2 串口通信的操作技巧 518
- 11.2.1 串口配置技巧 519
- 11.2.2 打开串口的技巧 521
- 11.2.3 事件设置技巧 525
- 11.2.4 读/写串口技巧 526
- 第12章 COM组件技术操作技巧 531
- 12.1 COM的概念和编程技巧 532
- 12.1.1 COM接口 532
- 12.1.2 CLSID和ProgID相互转换 533
- 12.1.3 利用IPicture接口实现
- 显示BMP/JPG/GIF图像 535
- 12.1.4 创建/删除快捷方式的技巧 538
- 12.1.5 C++类对象、DLL和COM的
- 区别和联系 541
- 12.1.6 使用C++API创建
- COM对象 541
- 12.1.7 使用智能指针创建
- COM对象 544
- 12.1.8 使用智能指针的封装类
- 创建COM对象 547
- 12.1.9 创建一个自动化组件的
- 技巧 548
- 12.1.10 使用ATL创建进程
- 外组件 552
- 12.2 MS Office中的COM应用 557
- 12.2.1 VC++实现Office自动化 557
- 12.2.2 VC++读/写Word文档 562
- 12.2.3 VC++修改Word字体
- 样式的技巧 565
- 第13章 系统编程技巧 577
- 13.1 系统信息处理技巧 578
- 13.1.1 获取CPU占用率的技巧 578
- 13.1.2 获取屏幕分辨率的技巧 582
- 13.1.3 获取操作系统版本的技巧 584
- 13.1.4 获取系统字体的属性的
- 技巧 586
- 13.1.5 获取系统显示元素的
- 颜色的技巧 589
- 13.1.6 设置系统启动自运行
- 程序的技巧 592
- 13.1.7 各种目录信息的获取的技巧 595
- 13.1.8 获取系统中字体类型的技巧 600
- 13.1.9 枚举系统当前进程的技巧 608
- 13.2 系统控制技巧 609
- 13.2.1 让应用程序只运行
- 一次的技巧 610
- 13.2.2 计算机相关信息的获取 614
- 13.2.3 隐藏和取消操作系统
- 任务栏的技巧 616
- 13.2.4 关闭计算机的技巧 617
- 13.2.5 清空回收站的技巧 621
- 13.2.6 打开/关闭CD-ROM的技巧 622