网络编程实用教程第二版_第4章

合集下载

网络编程技术第四次课

网络编程技术第四次课
一、IP地址和域名 IP地址和域名之间的其他关系
一台计算机可以有多个域名,分别用于不同的用途
一台主机从一个地方移动到另一个地方,如果更换了所 属网络,它的IP地址必须更换,但是域名可以保留。
如何在Java程序中根据IP地址查找主机的域名?
如何在Java程序中根据域名查找主机对应的IP地址?
二、查找Internet地址
二、InetAdd main(String args[]) throws Exception { InetAddress address = InetAddress.getByName(""); // 使用getByName()通过""来获取 InetAddress的对象,并且输出到控制台。 System.out.println(address); // 默认调用了InetAddress.toString()方法 System.out.println("-----"); …… }
二、查找Internet地址
二、InetAddress类 获取InetAddress类对象的方法
3.public static InetAddress getLocalHost(); 返回本机的InetAddress对象。
InetAddress i=InetAddress.getLocalhost(); 4. public static InetAddress getByAddress(byte[] addr) 根据给定的addr,返回其对应的InetAddress对象。
第四次课
InetAddress类和URL类的用法
一、网络编程部分内容简介 二、查找Internet地址
三、用URL检索数据

-计算机网络技术与应用教程(第2版) --PPT课件:第4章 Internet应用

-计算机网络技术与应用教程(第2版) --PPT课件:第4章 Internet应用

• 2. 网络应用层协议需要的服务
Internet应用
文件传输 超文本传输 电子邮件 远程终端访问 IP电话 FTP HTTP SMTP TELNET 专用协议
应用层协议
TCP TCP TCP TCP
TCP/UDP支持
通常UDP
流媒体
专用协议
UDP/TCP
4.2 域名服务系统
4.2.1 域名空间
• 2.中文域名 • 英文域名不太符合汉语习惯。随着Internet用户爆炸式地增长,这一 文化冲突也日益受到重视。1998年12月,第一个中文域名“中国青 年报”出现,用户只需在浏览器的地址栏中填入“中国青年报”即可 访问《中国青年报》主页。 • 2000年1月,CNNIC中文域名系统开始试运行。2000年5月,美国IDNS公司也推出中文域名注册服务。2000年11月7日,CNNIC中文域 名系统开始正式注册。2000年11月10日,美国NSI公司的中文域名系 统开始正式注册。这些都为汉语为母语的人群提供了方便。 • 中文域名的使用规则基本上与英文域名相同,只是它还允许使用2~ 15个汉字之间的字词或词组,并且中文域名不区分简繁体。CNNIC中 文域名有两种基本形式: • ● “中文.cn”形式的域名; • ● “中文.中国”等形式的纯中文域名。
• 1.域名空间及其结构
• 2.顶级域名
机构域
域 com edu gov int mil net org 商业机构( 教育机构( 政府机构( 国际组织( 军事机构( 网络服务机构( 非盈利机构( 描述
地理域
域名 aq ar at au be bg br ca ch cl cn de dk ec eg es fi 含义 南极大陆 阿根廷 奥地利 澳大利亚 比利时 保加利亚 巴西 加拿大 瑞士 智利 中国 德国 丹麦 厄瓜多尔 埃及 西班牙 芬兰 域名 fr gb gr hk hu ie il in is it jp kr kw lt lu mx my 含义 法国 大不列颠(同 希腊 香港地区 匈牙利 爱尔兰 以色列 印度 冰岛 意大利 日本 韩国 科威特 立陶宛 卢森堡 墨西哥 马来西亚 域名 nl no nz pl pr pt se sg su th tw uk us ve yu za 含义 荷兰 挪威 新西兰 波兰 波多黎各 葡萄牙 瑞典 新加坡 (前)苏联 泰国 台湾地区 英国 美国 委内瑞拉 南斯拉夫 南非

网络编程实用教程第二版_第4章MFC编程

网络编程实用教程第二版_第4章MFC编程
13
4.1.2 典型的MDI应用程序的构成
(2) 主边框窗口类CMainFrame
对于MDI应用程序,从CMDIFrameWnd类派 生主边框窗口类,主边框窗口的客户子窗口 (MDIClient)直接包含文档边框窗口。如果是SDI应 用程序,从CFrameWnd类派生边框窗口类,边框 窗口的客户子窗口(MDIClient)直接包含视窗口。
9
4.1.1 MFC是一个编程框架
总之,MFC封装了Win32 API,OLE API, ODBC API等底层函数的功能,并提供更高一层的接 口,简化了Windows编程。同时,MFC支持对底层 API的直接调用。这种简化体现在MFC提供了一个 Windows应用程序开发模式:MFC框架完成对程序的 控制,通过预定义或实现了许多事件和消息处理,来 完成大部分编程任务。MFC框架处理大部分事件,不 依赖程序员的代码;程序员的代码集中用来处理应用 程序特定的事件。
7
4.1.1 MFC是一个编程框架 3.虚拟函数和动态约束
MFC建立了消息映射机制,以一种富有效率、 便于使用的手段解决消息处理函数的动态约束问题。
这样,通过虚拟函数和消息映射,MFC类提供 了丰富的编程接口。程序员在继承基类的同时,可 以把自己实现的虚拟函数和消息处理函数嵌入MFC 的编程框架。MFC编程框架将在适当的时候、适当 的地方来调用程序的代码。
1.构成应用程序的对象
图4.1解释了典型的MDI应用程序的结构,箭头 表示信息流向。
11
4.1.2 典型的MDI应用程序的构成
图4.1 一个MDI应用程序的构成
12
4.1.2 典型的MDI应用程序的构成 (1) 应用程序类CTApp
应用程序类CTApp派生于CWinApp类。基于 框架的应用程序必须有且只有一个应用程序对象, 它负责应用程序的初始化、运行和结束。

网络编程2

网络编程2

网络编程实践一:运行“简单通信程序”,输入你想与之通信的同学的电脑IP地址(查找IP地址的方法请看下面),和其程序绑定的端口号,然后互发信息。

实践二:和你旁边的同学玩一局一分钟斗地主游戏,看一下谁胜谁负。

思考:IP地址和端口的作用?查找IP地址的方法:每一台计算机都有一个IP地址,计算机通过IP地址找到另外一台计算机。

所以你想和另外一台计算机通信,首先要知道这台计算机的IP地址,IP地址查看方法如下:第一步:右键单击“网络”后,选择“属性”。

第二步:点击“更改适配器设置”。

第三步:右键点击“本地连接”后,选择“属性”。

第四步:双击“Internet协议版本4(TCP/IPv4)”。

第五步:看到你的IP地址了吧?这台电脑的IP地址是222.17.5.6,你的电脑的IP地址又是多少?我们之前做的程序都是单机版的,从这节课开始,我们将要学习网络编程,让程序之间可以通过网络进行通信。

在学习网络编程之前,我们要弄明白信息是怎样从一台计算机准确地传输到另一台计算机的。

每一台接入网络的计算机都有一个IP地址,计算机通过IP地址找到另外一台计算机。

通过IP地址找到计算机之后,我们还要准确找到这台计算机上我们想要通信的应用程序。

计算机之间的通信实际上是一对应用程序的通信,例如一对qq之间的通信或者一对飞信之间的通信。

我们的计算机可以同时打开若干程序,例如同时打开qq和飞信,但是通过IP地址我们只能找到计算机,不能找到我们想要与之通信的程序。

例如我们用qq聊天,当然是希望信息能发到对方的qq,而不是对方的飞信。

那么怎样能够准确找到我们想要通信的程序呢?靠的就是端口号,每个网络程序都要绑定一个端口号,这样通过IP地址和端口号就能唯一的确定一台计算机上的某个应用程序。

如下图所示,IP地址为192.168.1.1的计算机上(简称为计算机1)的qq想要和IP地址为192.168.1.2的计算机(简称为计算机2)上的qq进行通信,计算机1的qq发送的信息通过IP地址192.168.1.2找到计算机2,再通过计算机2上的端口1003找到qq,数据就能正确到达计算机2的qq上。

网络编程入门教程

网络编程入门教程

网络编程入门教程网络编程是现代计算机科学中非常重要的领域之一。

它涉及到计算机与计算机之间通过网络进行通讯和交流的方法和技术。

在当今数字化时代,网络编程的重要性日益增长。

无论是开发网站、移动应用程序还是进行数据传输和云计算,网络编程都是一个必不可少的技能。

本篇文章将向您介绍网络编程的基础知识和常用编程语言,以及如何开始学习和应用网络编程。

1. 网络编程基础知识在学习网络编程之前,我们需要了解一些基础概念。

1.1 IP地址和端口号IP地址是计算机在网络上的唯一标识符。

它由4个8位数字组成,每个数字的取值范围是0到255,表示为“XXX.XXX.XXX.XXX”。

IPv4地址是目前广泛使用的IP地址版本。

端口号是一个16位的数字,用于标识计算机上运行的不同服务。

常见的端口号范围是0到65535,其中0到1023号端口被保留为特定的系统服务。

1.2 TCP和UDP协议TCP(传输控制协议)是一种面向连接的协议,它提供可靠的数据传输和错误检测机制。

TCP适用于数据完整性和可靠性较为重要的场景,如文件传输、电子邮件等。

UDP(用户数据报协议)是一种无连接的协议,它提供不可靠但高效的数据传输。

UDP适用于实时应用程序,如语音通话、视频流传输等。

2. 常用的编程语言有多种编程语言可用于网络编程。

以下是一些常用的选择:2.1 PythonPython是一种简单易学的高级编程语言,它提供了丰富的网络编程库和框架,如标准库中的socket模块和第三方库如Twisted和Scapy。

Python适合初学者和快速原型开发。

2.2 JavaJava是一种跨平台的编程语言,具有广泛的应用和强大的网络编程能力。

Java 提供了Socket和ServerSocket类,使得编写网络应用程序更加简单。

另外,Java还有一些优秀的网络框架,如Netty和Spring Boot。

2.3 C/C++C/C++是一种高效的系统级编程语言,也适合进行网络编程。

网络编程基础操作指南

网络编程基础操作指南

网络编程基础操作指南第1章网络编程基础概念 (3)1.1 网络编程概述 (3)1.2 网络协议与模型 (3)1.3 IP地址与端口号 (3)第2章套接字编程简介 (4)2.1 套接字概念 (4)2.2 套接字类型与函数 (4)2.3 面向连接的套接字编程 (5)第3章套接字编程进阶 (5)3.1 非阻塞IO与多路复用 (5)3.1.1 非阻塞IO模型 (5)3.1.2 多路复用 (5)3.1.3 非阻塞IO与多路复用的结合 (5)3.2 高级套接字选项 (6)3.2.1 套接字选项概述 (6)3.2.2 常用高级套接字选项 (6)3.2.3 设置与获取套接字选项 (6)3.3 套接字超时处理 (6)3.3.1 超时的概念与作用 (6)3.3.2 设置套接字超时 (6)3.3.3 超时处理策略 (6)第4章基于TCP的套接字编程 (6)4.1 TCP协议基础 (6)4.1.1 面向连接 (7)4.1.2 可靠传输 (7)4.1.3 流量控制 (7)4.1.4 拥塞控制 (7)4.2 TCP客户端与服务器模型 (7)4.2.1 服务器端编程步骤 (7)4.2.2 客户端编程步骤 (8)4.3 TCP粘包问题及解决方案 (8)4.3.1 粘包问题产生原因 (8)4.3.2 解决方案 (8)第5章基于UDP的套接字编程 (8)5.1 UDP协议基础 (8)5.1.1 UDP协议特点 (8)5.1.2 UDP协议头结构 (9)5.2 UDP客户端与服务器模型 (9)5.2.1 UDP服务器 (9)5.2.2 UDP客户端 (9)5.3 UDP广播与多播 (9)5.3.2 多播 (10)第6章网络应用层协议 (10)6.1 HTTP协议 (10)6.1.1 HTTP请求与响应 (10)6.1.2 常见HTTP方法 (10)6.1.3 状态码 (10)6.2 FTP协议 (11)6.2.1 FTP连接模式 (11)6.2.2 FTP命令与响应 (11)6.3 SMTP与POP3协议 (11)6.3.1 SMTP协议 (11)6.3.2 POP3协议 (12)第7章网络安全基础 (12)7.1 网络攻击手段与防护策略 (12)7.1.1 网络攻击手段 (12)7.1.2 防护策略 (12)7.2 加密技术 (13)7.2.1 对称加密 (13)7.2.2 非对称加密 (13)7.2.3 混合加密 (13)7.3 SSL/TLS协议 (13)7.3.1 SSL协议 (13)7.3.2 TLS协议 (13)第8章网络编程高级话题 (14)8.1 网络功能优化 (14)8.1.1 网络协议的选择 (14)8.1.2 网络拥塞控制 (14)8.1.3 数据传输优化 (14)8.1.4 网络缓存策略 (14)8.2 网络编程中的并发处理 (14)8.2.1 多线程与多进程 (14)8.2.2 非阻塞IO与事件驱动 (14)8.2.3 异步IO (14)8.2.4 协程 (14)8.3 网络编程与云计算 (14)8.3.1 虚拟化技术 (14)8.3.2 分布式系统 (15)8.3.3 云网络架构 (15)8.3.4 服务网格 (15)第9章移动网络编程 (15)9.1 移动网络编程概述 (15)9.2 Android网络编程 (15)9.2.1 网络通信基础 (15)9.2.3 网络安全 (16)9.3 iOS网络编程 (16)9.3.1 网络通信基础 (16)9.3.2 网络编程框架 (16)9.3.3 网络安全 (16)第10章网络编程实战案例 (16)10.1 简单聊天程序 (17)10.1.1 服务器端实现 (17)10.1.2 客户端实现 (17)10.2 文件传输程序 (17)10.2.1 服务器端实现 (17)10.2.2 客户端实现 (18)10.3 网络游戏开发基础 (18)10.3.1 游戏服务器端实现 (18)10.3.2 游戏客户端实现 (18)10.4 基于Web的网络应用开发 (18)10.4.1 Web服务器端实现 (18)10.4.2 Web客户端实现 (19)第1章网络编程基础概念1.1 网络编程概述网络编程是计算机编程的一个分支,主要研究如何在不同的计算机之间通过网络进行数据传输与通信。

《网络编程技术教程》课件

《网络编程技术教程》课件

Spring框架提供了多种模块,如 Spring MVC、Spring Security 等,方便开发者快速构建Web应 用程序和实现安全控制等功能。
04
网络编程实践
建立TCP服务器与客户端
总结词
掌握TCP协议,实现服务器与客户端的通信
详细描述
介绍TCP协议的基本原理,包括连接建立、数据传输和关闭连接的过程。通过编程实现一个简单的 TCP服务器和客户端,能够进行基本的通信。
非对称加密算法
使用不同的密钥进行加密和解密,常 见的算法有RSA、ECC等。
哈希算法
将数据转换成固定长度的哈希值,用 于验证数据的完整性和真实性。
数据压缩与解压缩
减少数据的大小,提高传输效率,常 见的算法有ZIP、RAR等。
负载均衡与性能优化
负载均衡器
将网络请求分发到多个服务器 上,平衡负载,提高系统处理
03
Java的网络编程框架有Spring MVC、Struts2等,可以帮助 开发者快速构建企业级Web应 用程序。
Node.js网络编程
01
Node.js是一个基于Chrome V8引擎的JavaScript运行环境 ,可以用来编写服务器端JavaScript应用程序。
02
Node.js具有非阻塞I/O模型、单线程等特点,适合构建高 并发、高性能的网络应用。
云计算平台上的网络编程需要考虑如何有效地利用云资源、如何实现高可 用性和可伸缩性、如何保证数据的安全性和隐私保护等问题。
云计算的发展推动了容器化和微服务架构的兴起,使得网络编程更加模块 化和可维护。
大数据处理与网络编程
大数据技术的广泛应用使得网络编程需要考虑如何处理大规模数据流、如何实现高效的数据 分析和处理、如何保证实时性等问题。

Linux网络编程第二版

Linux网络编程第二版

1.6.1 GPL许可证的历史
GPL的“版本1‖,在1989年1月诞生。在1990年时 ,因为一些共享库的使用而出现了对GPL许可证制度更 为宽松的需求,在GPL―版本2‖在1991年6月发布时,另 一许可证——库通用许可证(Library General Public License,简称LGPL)也随之发布,并记作“版本2‖以 示对GPL的补充。在LGPL版本2.1发布时与GPL版本不 再对应,而LGPL也被重命名为GNU宽通用公共许可证 (Lesser General Public License)。 相对于GPLv2,主要有四个不同的方面: 数字版权问题。 专利扩散许可。 衍生产品的定义。 GPLv3协议于其他协议的兼容问题。
1.2.3 POSIX 标准 POSIX(Portable Operating System Interface for Computing Systems)是由IEEE和ISO/IEC开发 的一套标准。POSIX标准是对UNIX操作系统的经验和 实践的总结,对操作系统系统调用的服务接口进行了 标准化,保证所编制的应用程序在源代码一级可以在 多种操作系统上进行移植。 在90年代初,POSIX标准的制定处于最后确定的投 票阶段,而Linux正处于开始的诞生时期。作为一个指 导性的纲领性标准,Linux的接口与POSIX相兼容。
软件包管理器
apt up2date(rpm), yum(rpm) rpm
SUSE Linux

YaST(rpm), 第三方apt(rpm)软件 库(repository) rpm
Mandriva

1.4.2 内核版本的选择 内核是Linux操作系统的最重要的部分,从最初的0.95 版本到目前的2.6.28.4版本,Linux内核开发经过了近20年 的时间,其架构已经十分稳定。Linux内核的编号采用如下 编号形式: 主版本号.次版本号.主补丁号.次补丁号 Linux内核版本的开发源代码树目前比较通用的是 2.6.xx的版本,当然,有部分2.4的版本仍在使用。与2.4版 本的内核相比较,2.6版本内核具有如下的优势: 支持绝大多数的嵌入式系统,加入了之前嵌入式系统经 常使用的μClinux的大部分代码,并且子系统的支持更加细 化,可以支持硬件体系结构的多样性,可抢占内核的调度 方式支持实时系统,可定制内核。

c语言网络编程教程

c语言网络编程教程

c语言网络编程教程C语言网络编程是一种非常重要和广泛应用的编程技术,它在今天的网络时代具有非常重要的意义。

本文将介绍C语言网络编程的基本概念、常用的网络编程方法和一些实际应用,帮助读者了解和学习C语言网络编程。

首先,我们先来了解一下什么是网络编程。

网络编程是通过网络实现两台或多台计算机之间的数据交换和通信的过程。

在网络编程中,C语言是一种非常常用和实用的编程语言,因为它具有高效性、灵活性和跨平台性的优势。

在C语言网络编程中,最常用的是TCP/IP协议,它是一种基于连接的协议,可以保证数据传输的可靠性和有序性。

在TCP/IP协议中,客户端和服务器之间通过套接字(socket)进行通信。

套接字是一个抽象概念,它是一个端点,用于发送和接收数据。

在C语言中,可以使用socket()函数来创建套接字。

在网络编程中,通常有两种常用的方式来实现数据通信,即面向连接的套接字和无连接的套接字。

面向连接的套接字使用TCP协议,通过三次握手建立连接,然后进行双向通信。

无连接的套接字使用UDP协议,它不需要建立连接,可以直接进行数据传输。

使用C语言进行网络编程时,首先需要连接服务器。

可以使用connect()函数来建立与服务器的连接。

一旦连接建立成功,就可以使用send()函数向服务器发送数据,并使用recv()函数接收服务器返回的数据。

使用send()和recv()函数可以实现双向通信。

另外,在C语言网络编程中还有一些常用的函数,如bind()、listen()和accept()。

bind()函数用于将套接字与特定的IP地址和端口号绑定在一起;listen()函数用于监听客户端的连接请求;accept()函数用于接受客户端的连接请求,并返回一个新的套接字。

在实际应用中,C语言网络编程有许多实际的应用场景,如Web服务器、网络游戏、远程控制等。

Web服务器是一个常见的应用,它可以接收来自客户端的HTTP请求,并返回相应的网页。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图4.1 一个MDI应用程序的构成
(1)应用程序类CTApp 应用程序类CTApp派生于CWinApp类。基 于框架的应用程序必须有且只有一个应用程 序对象,它负责应用程序的初始化、运行和 结束。
(2)主边框窗口类CMainFrame
对于MDI应用程序,从CMDIFrameWnd类派生 主边框窗口类,主边框窗口的客户子窗口 (MDIClient)直接包含文档边框窗口。如果是SDI应 用程序,从CFrameWnd类派生边框窗口类,边框 窗口的客户子窗口(MDIClient)直接包含视窗口。 如果要支持工具条、状态栏,则派生的主边框 窗口类还要添加CToolBar和CStatusBar类型的成员 变量,并且要在一个OnCreate消息处理函数中初始 化这两个控制窗口。 主边框窗口用来管理文档边框窗口、视窗口、 工具条、菜单、加速键等,协调半模式状态(如 上下文的帮助(SHIFT+F1模式)和打印预览)。
第4章 MFC编程
MFC类库是C++类库,构成了MFC编程 框架。这些类分别封装了Win32应用程序编 程接口、应用程序的概念、OLE特性、以及 ODBC和DAO数据访问的功能。MFC类具有 继承关系,有虚拟函数和动态约束,并提供 了MFC的开发模板。
4.1 MFC概述
4.1.1 MFC是一个编程框架
(1)对应的数据结构不同
MFC对象是相应C++类的实例,这些类是由MFC或 者程序员定义的;Windows对象是Windows系统的内部 结构的实例,通过一个句柄来引用;MFC给这些类定 义了一个成员变量来保存MFC对象对应的Windows对象 的句柄。
(2)所处的层次不同
MFC对象是高层的,Windows对象是低层的。MFC 对象不仅把指向相应Windows对象的句柄封装成自己的 成员变量(句柄实例变量),还把借助该句柄 (HANDLE)来操作Windows对象的Win32 API函数封 装为MFC对象的成员函数。站在高层,通过MFC对象 去操作低层的Windows对象,只须直接引用成员函数。
3.虚拟函数和动态约束 MFC建立了消息映射机制,以一种富有效率、 便于使用的手段解决消息处理函数的动态约 束问题。 这样,通过虚拟函数和消息映射,MFC类提 供了丰富的编程接口。程序员在继承基类的 同时,可以把自己实现的虚拟函数和消息处 理函数嵌入MFC的编程框架。MFC编程框架 将在适当的时候、适当的地方来调用程序的 代码。
4.2 MFC和Win32 4.2.1 MFC对象和Windows对象的关系
MFC中最重要的封装是对Win32 API的封装, 因此,理解Windows 对象和MFC对象之间的 关系是理解MFC的一个关键。所谓Windows 对象是Win32下用句柄表示的Windows操作 系统对象;所谓MFC对象是C++对象,是一个 C++类的实例。两者有很大的区别,但联系紧 密。
(5)使用的范围不同
MFC对象只服务于创建它的进程,对系统的其他 进程来说是不可见、不可用的;而一旦创建了 Windows对象,其句柄在整个Windows系统中,是全 局可见的。一些句柄可以被其他进程使用。典型的例 子是,一个进程可以获得另一进程的窗口句柄,并给 该窗口发送消息。 (6)销毁的方法不同
视类从CView或它的派生类派生。视和文档联 系在一起,在文档和用户之间起中介作用,即视 在屏幕上显示文档的内容,并把用户输入转换成 对文档的操作。
(6)文档模板
文档模板类一般不需要派生。MDI应用程序使 用多文档模板类CMultiDocTemplate;SDI应用程序 使用单文档模板类CSingleDocTemplate。 应用程序通过文档模板类对象来管理上述对象 (应用程序对象、文档对象、主边框窗口对象、 文档边框窗口对象、视对象)的创建。
2.构成应用程序的对象之间的关系 这里,用图的形式可直观地表示所涉及的MFC类的继承或 者派生关系,如图4.2所示意。
图4.2 构成MDI应用程序的各对象之间的派生关系
3.构成应用程序的文件 下面,从文件的角度来考察AppWizard生 成了哪些源码文件,这些文件的作用是什么。 表4.1列出了AppWizard所生成的头文件, 表4.2列出了了AppWizard所生成的实现 文件及其对头文件的包含关系。
(3)对COM/OLE特性的封装
OLE(对象的链接与嵌入)建立在COM(组件 对象模型)之上,由于支持OLE的应用程序必 须实现一系列的接口(Interface),因而相 当繁琐。MFC的OLE类封装了OLE API大量 的复杂工作,提供了实现OLE的更高级接口。 (4)对ODBC功能的封装
MFC封装了ODBC API的大量的复杂的工作, 形成了与ODBC之间接口的高级C++类,提 供了一种方便的访问数据库的编程模式。
总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提 供更高一层的接口,简化了Windows编程。 同时,MFC支持对底层API的直接调用。这 种简化体现在MFC提供了一个Windows应 用程序开发模式:MFC框架完成对程序的 控制,通过预定义或实现了许多事件和消息 处理,来完成大部分编程任务。MFC框架 处理大部分事件,不依赖程序员的代码;程 序员的代码集中用来处理应用程序特定的事 件。
另一个是CCmdTarget类,它是从CObject派生 的。CCmdTarget类通过进一步封装一些属性和方 法,提供了消息处理的架构。在MFC中,任何可以 处理消息的类都是从CCmdTarget类派生的。
针对每种不同的对象,MFC都设计了一组类对 这些对象进行封装,每一组类都有一个基类,从基类 派生出众多更具体的类。这些对象包括以下种类:窗 口对象,基类是CWnd;应用程序对象,基类是 CwinThread;文档对象,基类是Cdocument,等 等。程序员可以结合自己的实际,从适当的MFC类 中派生出自己的类,实现特定的功能,达到自己的编 程目的。
“窗口类型”是Windows系统的数据结构,可以把它理解为 Windows系统的类型定义,而窗口对象则是相应“窗口类型” 的实例。Windows使用一个结构来描述“窗口类型”,其定义 如下: typedef struct _WNDCLASS { UINT cbSize; //该结构的字节数 UINT style; //窗口类型的风格 WNDPROC lpfnWndProc; //窗口过程 int cbClsExtra; int cbWndExtra; HANDLE hInstance; //该窗口类型的窗口过程所属的应用实例 HICON hIcon; //该窗口类型所用的像标 HCURSOR hCursor; //该窗口类型所用的光标 HBRUSH hbrBackground; //该窗口类型所用的背景刷 LPCTSTR lpszMenuName; //该窗口类型所用的菜单资源 LPCTSTR lpszClassName;//该窗口类型的名称 HICON hIconSm; //该窗口类型所用的小像标 } WNDCLASS;
4.1.2 典型的MDI应用程序的构成
用 AppWizard 产 生 一 个 没 有 OLE 等 支 持 的 MDI工程,工程名叫T。AppWizard会自动创 建一系列文件,构成一个应用程序骨架。这些 文 件 分 为 四 类 : 头 文 件 ( .h ) , 实 现 文 件 (.cpp),资源文件(.rc),模块定义文件(.def), 等。 1.构成应用程序的对象 图4.1解释了典型的MDI应用程序的结构,箭 头表示信息流向。
MFC应用程序框架,简称MFC框架,是由 MFC(Microsoft Foundation Class Library)中的 各种类结合起来构成的。MFC框架从总体上定 义了应用程序的轮廓,并提供了用户接口的标 准实现方法,程序员只须通过预定义的接口把 具体应用程序特有的东西填入这个轮廓,就能 建立Windows下的应用程序。
(3)文档边框窗口CChildFrame 文档边框窗口类从CMDIChildWnd类派生, MDI应用程序使用文档边框窗口来包含视窗 口。
(4)文档CTDoc
文档类从CDocument类派生,用来管理数 据,数据的变化、存取都是通过文档实现的。 视窗口通过文档对象来访问和更新数据。
(5)视CTView
1.MFC类库封装的内容
(1)对Win32应用程序编程接口的封装
MFC将每一个Windows对象封装成一个相应 的C++ 对象。
(2)对应用程序概念的封装 使用SDK编写Windows应用程序时,总要定 义窗口过程,注册Windows Class,创建窗口 等等,要做许多处理工作。MFC封装了这些处 理,替程序员完成这些工作。
MFC 对 象 随 着 析 构 函 数 的 调 用 而 消 失 ; 但 Windows对象必须由相应的Windows系统函数销毁。
4.2.2 几个主要的类 1.Win32 API的窗口对象(Windows Object)
MFC的CWnd类是对Win32 API的窗口对象的封装, 首先简单介绍Win32 API的窗口对象。 用SDK的Win32 API编写各种Windows应用程序, 有其共同的规律:首先是编写WinMain函数,编写 处理消息和事件的窗口过程WndProc,在WinMain里 头注册窗口(Register Window),创建窗口,然后 开始应用程序的消息循环。 一个应用程序在创建某个类型的窗口前,必须首 先注册该“窗口类型”(Register Window Class),把 窗口过程、窗口风格以及其他信息和要登记的窗口 类型关联起来。
4.MFC的开发模板
MFC实现了对应用程序概念的封装,实现 了类、类的继承、动态约束、类的关系和相互 作用的封装。这样封装的结果是为程序员提供 了一套开发模板,罗列在应用程序向导 AppWizard中。针对不同的应用和目的,程 序员可以采用不同的模板。例如,SDI单文档 应用程序模板,MDI多文档应用程序模板,规 则DLL应用程序模板,扩展DLL应用程序模板, OLE/ActiveX应用程序模板,等等。这些模板 都采用以文档-视为中心的思想,每个模板都 包含一组特定的类。
相关文档
最新文档