VC 讲义

  • 格式:pdf
  • 大小:69.71 KB
  • 文档页数:24

本文由shichen4贡献 doc1。

第 1 讲 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 第 2 讲 2.1 2.2 2.3 2.4 2.5 2.6 第 3 讲 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 第 4 讲 4.1 4.2 4.3 4.4 4.5 4.6 第 5 讲 5.1 5.2 5.3 5.4 5.5 5.6 5.7 第 6 讲 6.1 MFC 与 Windows 编程基础 …… 3 Windows 控制台程序…… 3 VC++6.0 集成环境的介绍 …… 3 MFC 概要 …… 4 CString 类 …… 5 CTime 类…… 6 什么是 windows 消息? …… 7 消息驱动-主消息循环 …… 7 应用程序消息流向示意图 …… 9 通过消息控制其它应用程序 …… 11 设备场境…… 12 绘制…… 12 CDC 的实质 …… 12 GDI 对象…… 13 设备无关位图…… 14 坐标系统…… 15 图元文件…… 15 对话框与控件…… 16 对话框…… 16 资源…… 16 模态与非模态对话框 …… 18 控件…… 18 DDX 数据交换 …… 19 window 标准控件示例 …… 20 ActiveX 控件示例 …… 21 通用对话框…… 22 文档…… 24 单文档-视图结构(SDI) …… 24 多文档-视图结构(MDI) …… 25 文档的责任…… 26 MFC 对数据结构的支持 …… 26 MFC 对文件的支持 …… 28 MFC 对归档的支持 …… 28 视图…… 31 标准控件补充…… 31 滚动视图…… 32 编辑视图…… 32 列表视图…… 33 菜单…… 33 工具栏…… 34 状态栏…… 34 多线程…… 35 线程与进程…… 35 第 第 第 第 6.2 6.3 6.4 7 讲 7.1 7.2 7.3 8 讲 8.1 8.2 8.3 9 讲 9.1 9.2 9.3 9.4 9.5 10 讲 10.1 10.2 10.3 10.4 10.5 挂起与唤醒…… 36 线程的排斥…… 37 线程的同步…… 37 数据库…… 39 ODBC 访问…… 39 事务支持…… 41 ADO 访问 …… 41 DLL …… 43 创建普通 DLL …… 43 DLL 调用 …… 43 DLL 中使用 MFC …… 44 网络与通信…… 46 WM_COPYDATA 用于本机进程通信…… 46 Socket 概述 …… 46 UDP 通信…… 47 TCP 双节点通信 …… 49 TCP 多节点通信 …… 50 COM 编程…… 51 概述…… 51 创建 ActiveX …… 51 COM 概念…… 52 创建 COM 组件…… 53 COM 到 DCOM…… 53 第1讲 1.1 Windows 控制台程序 MFC 与 Windows 编程基础 Windows 环境下,仍然可以编写类似 DOS 下效果的程序,这种程序称为:控制台程序 (console application) 。

其实,控制台程序并不完全等于 DOS 仿真程序,甚至可以说完全不 等于 DOS 程序。

它们的主要区别在于: Windows 控制台程序的内存结构是:32 地址的平板结构;而 DOS 程序的内存结构是: 16 位的段址结构。

在 windows 控制程序中对内存地址的处理更加简明,不用考虑复杂的段 和偏移量的问题。

 生成 windows 控制台程序的方法: File New projects 页签 Win32 Console Application [填写 project Name,选择 locations] 选 “hello world Application” Finish 在 WorkSpace 中,File 页签,找到主程序。

看到下面的函数: int main(int argc, char* argv[]); 这个函数与我们熟知的 void main( ) 具有类似的功能。

它是程序运行的起点。

 与 DOS 程序一样,Windows 控制台程序也分为两种类型:批处理类型和交互式类型。

 批处理类型的很容易编写,就是一次执行规定的动作,直到结束处理。

这种类型的程序通常 只花费若干毫秒就会运行结束。

如果在 windows 的文件夹下点击这种类型的程序,我们会 看到黑窗口一闪就消失了;交互式类型的程序等待用户输入信息(一般就是键盘) ,直到输 入了回车,程序才继续运行。

重复这个过程,直到程序结束。

 CString s; cin >> s; cout << “您输入了:” << s << endl; 1.2 VC++6.0 集成环境的介绍 集成环境(IDE)是为了提高工作效率而提供的整合工具,它把源代码的编辑、编译、运 行、调试等一系列工作集中在一个界面上来完成。

实际上,它就像一个大管家,指挥后台的 许多实用程序协同工作。

VC++6.0 的 IDE 提供了很多代码辅助生成的工具,它们称为:向 导(Wizzard) 。

 IDE 由菜单,工具栏和众多的窗口组成。

 正如标准的 windows 程序一样,菜单提供了能够使用的所有功能;工具栏提供了菜单 上最常用功能的快捷方式。

 并不必担心因不小心而关闭了一个窗口。

 关闭窗口只是把它藏起来, 并不是把它删除了。

 View 菜单下还可以再选出我们要的窗口。

 工具栏上可以放很多“工具组” ,这些小组并没有都显示出来,选择哪些组需要显示的 方法是:工具栏的“空地儿”上右键,勾选某些项目即可。

 无论是工具栏,窗口,菜单都支持一种很“酷”的特性:泊靠操作。

你可以拖动“泊靠 手柄” ,使一个功能组成为独立的窗口,或者停泊在其它窗口的边缘。

 为了把源代码加工为 Exe 或者 DLL,VC++6.0 需要一个工程文件,就好比一个包工头, 由它组织所需要头文件、源文件、资源文件等等,以便自动完成编译工作。

 “包工头”可以做许多设置,最主要的:project settings;工具栏,右键 勾选 build。

VC 的编译结果可以是 debug 类型或者 release 类型。

 debug 类型包含了丰富的调试信息, release 类型则会更小,运行更快。

 ,而不是某个 cpp 文件。

 注意:打开一个工程,一定要选打开“包工头” debug 和 release 目录中包含编译的中间结果和最终产品, 文件比较大, 当备份源代码的 时候可以把它们删除,以节省空间。

下次编译又会自动产生出来。

 工程文件可以管理工程成员的添加和去除。

方法是:先拷贝文件到工程所在的目录,然 后,在 priject 窗口中,选中工程,右键,Add Files to project。

 删除的方法:选中要删除的文件,按 delete 键。

 注意:这里的删除只是开除出本工程,并没有把文件删除。

 【练习】把已知的 cpp,h 文件加入到工程中。

1.3 MFC 概要 我们在 C++中学习了如何构建类, 使用类创建对象以及调用对象的成员函数完成特定的 任务。

比较而言,使用对象的体验是轻松愉快的;创建类的工作却是艰苦而乏味的。

所幸这 些乏味的工作已经由微软完成了很多, 那就是 MFC 类库。

 在这个类库中提供了许多常用的, 相互联系的类。

 学习 VC++6.0 的主要任务之一就是熟悉 MFC 类库中提供的常用类的特性和 用法。

 MFC 有着复杂的集成层次,我们可以在帮助文档中看到。

方法是:随便输入一个已知 的类的名字,在它的帮助的最后,点击超连接:HierarchyChart(继承图) 从图中可以看到,大部分类都是从 CObject 继承出来的。

也有一些类不是从 COjbect 继 承过来,比如简单类: 这些简单类的成员函数比较少,结构简单;但它们被使用的频度却很高,因此可以把对 简单类的学习,作为 MFC 类库学习的入门。

 注意:要想使自己的包含 MFC 类的代码能编译通过,需要两个条件:include 相应的 头文件; 连接选项中选择 MFC 的静态或者动态链接库。

 方法是: project settings General, 在 microsoft Fundation class 中选择 MFC 支持。

 学习过 C 语言的人都会对 C 的串处理皱眉,因为它往往并不是一件容易的事情。

C 语 言的串只是一个指针(其实就是一个整数) ,需要我们自己时刻考虑串的存储图景,为它分 配足够的空间,并在适当的时候收回空间。

CString 类把我们从这种枯燥、易错的工作中解 脱出来。

1.4 CString 类 构造函数:CString 类提供了丰富的构造方法,常用的方式是: CString s; CString s(“This is a String”); 连接操作: CString s1, s2; s1 = s1 + s2; s1 = s2 + “abcd”; s1 = “1234” + “abcd” 是错误的写法 Format 操作: CString s; s.format(“总和=%d”, n); Format 代替了传统的繁琐的 sprintf 操作。

 把其它类型转化到 CString 类型: char* p = “this is a string”; CString s; s = p; // 直接转换 double val = 25.3; s.format(“%f”,val); 把 CString 转换为其它类型: CString s = “23”; int n = atoi(s); const char* p = s; // 注意:一定要有 const 才允许转换。

 CString 的其它常用操作: int n = s.GetLength() // 取得串的长度 if ( s.Compare(“abcd”)==0 ) // 比较串 if ( s.CompareNoCase(s2) == 0 ) // 不区分大小写的比较 s.Empty(); if ( s.IsEmpty() ) // 置空与判空 int n = s.Find(“xyz”) // 在 s 中查找子串,返回出现的位置,没有则-1, int n = s.Find(“xyz”,10); // 从指定的位置开始查找 int n = s.ReverseFind(‘.’) // 从后到前寻找点号 s.MakeLower(); s.MakeUpper(); // 转化为小写或者大写 s.Replace(“old”,”new”); // 把 old 替换为 new s = s.Mid(4,2); // 从第 5 个开始取 2 个字符。