是一个完整的 Windows可执行文件。
与控制台程序相同的是,一个WIN32程序也必须有一个程序入口点,
但是在这儿它不再叫main(),而叫做WinMain(),当WINDOWS的SHELL检测到用户欲执行一个EXE程序
就会调用加载器把程序进行加载然后调用C startup code,后者再调用WinMain(),程序的执行就开始了
WinMain()函数的原型为:
int CALLBACK WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow);
图2-1 32位WINDOWS程序的开发流程
下面程序必须进行必要的初始化工作-产生窗口
第一步是注册一个窗口类:
用API函数:
RegisterClass(),而这个函数需要一个已经定义好的系统结构:
WNDCLASS,这个结构里面定义了窗口的种种属性
需要自己定义但是许多属性都有默认值。
然后调用CreateWindow()函数来产生具有上述定义属性的已注册窗口,
但是需要注意的是它只是生成窗口但并不显示之
所以还需要调用一个函数ShowWindow()将它显示在屏幕上
做完这些初始化工作以后
系统将进入消息循环:
while (GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
当消息循环捕捉到消息以后将交由窗口函数WndProc()窗口函数进行相应的处理。
这样,一个基于消息事件驱动的WIN32程序的雏形就建立了起来。
由上面的介绍可以看出,直接用API函数开发一个WIN32程序是相当麻烦的,
有好多既定的重复性的工作要做所以微软就用C++的类机制将绝大部分的API函数进行了封装
构成了类并且将基本的流程也封装在类机制下面
大大简化了WIN32开的的复杂性尤其是在开发比较大型程序的时候这个便宜性更会得以体现。
它就是Microsoft Foundation Classes,简称为MFC,可以说它是VC开发环境的一个核心构件。
MFC构架了一个庞大的类体系结构,在4.0时代就多达189个类,
程序代码达252个文件58个头文件共10MB之多
MFC4.2时又多加了29个类
但是最为主干的是下面类结构示图所示的一些类:
图2-2 MFC类框架主体
CObject 是 MFC 类库的根类。
下面MFC 类库主要包括:
(1)CCmdTarget 类:
是 CObject 类的子类,
它是 MFC 库中所有具有消息映射属性的类的公共基类。
它的子类有 CWinThread 类,CWnd 类、 CDocument 类,
从 CCndTarget 类派生的类能在程序运行时动态创建对象
并处理命令消息。
(2)CWinThread 类:
是 CCmdTarget 的子类。
CWinThread 是所有线程类的基类,封装了应用程序操作的多线程功能。
应用程序类 CWinApp 是 CWinThread 的子类,
封装了初始化、运行、终止应用程序的代码。
(3)CWnd 类:
窗口类,是 CcmdTarget 类的子类,
从 CWnd 派生的类可以拥有自己的窗口并对它进行控制。
窗口框架类 CFrameWnd 和 CView 类是 CWnd 的子类,
前者创建和维护窗口的边框、菜单栏、工具栏、状态栏
负责显示和搜索用户命令后者负责为文档提供一个或几个视图。
视图的作用是为修改、查询文档等任务提供人机交互的界面。
(4)文档类 CDocument 类:
是 CCmdTarget 类的子类,
负责封装和维护文档。
文档包括应用程序的工作成果或环境设置数据等,
可以是程序需要保存的任何内容。
一个 MFC 应用程序并不直接操作上述类,
而是以上述类为基类派生新的类构建 Windows 应用程序的基本框架。
构建一个基于MFC框架的程序,可以使用MFC的向导程序,
但首先要明白
一个基于MFC的程序可以有几种类型:
基于单文档结构的程序
基于多文档结构的程序以及基于对话框的应用程序
不同类型的程序具有不同的程序属性。
使用其向导以及控件编程,使得不论是界面编写,
还是程序内核设计都更加的简单。
其中有合理的消息映射机制,有方便的运行时类型识别功能,
更有文档/视图结构设计文档串行化功能等非常多的优秀功能。
2.2.2 TCP/IP协议简介
TCP/IP协议实际上就是在物理网上的一组完整的网络协议。
其中TCP是提供传输层服务,而IP则是提供网络层服务。
TCP/IP主要包括以下协议:
IP:
网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。
同时为ICMP,TCP,UDP提供分组发送服务。
用户进程通常不需要涉及这一层。
ICMP:
网间报文控制协议(Internet Control Message Protocol)此协议处理网关和主机的差错和传送控制。
TCP:
传输控制协议(Transmission Control Protocol)这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。
它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。
TCP/IP协议的核心部分是传输层协议(TCP、UDP),
网络层协议(IP)和物里层。
2.2.3 Windows Socket网络编程接口概述
在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。
在这种方案中客户应用程序向服务器程序请求服务。
一个服务程序通常在一个众所周知的地址监听对服务的请求,
也就是说服务进程一直处于休眠状态直到一个客户向这个服务的地址提出了连接请求。
在这个时刻,服务程序被"惊醒"并且为客户提供服务-对客户的请求作出适当的反应。
为了方便这种Client/Server模型的网络编程,
90年代初由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口
即Windows Sockets规范它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。
现在的Winsock已经基本上实现了与协议无关,
你可以使用Winsock来调用多种协议的功能但较常使用的是TCP/IP协议。
Socket实际在计算机中提供了一个通信端口,
可以通过这个端口与任何一个具有Socket接口的计算机通信。
应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。
微软为Visual C++定义了Winsock类如CAsyncSocket类和派生于CAsyncSocket 的CSocket类,
它们简单易用我们当然可以使用这些类来实现自己的网络程序
但是为了更好的了解Winsock API编程技术本设计中将使用底层的API函数实现 Winsock 平台的即时通信工具。
在VC中进行WINSOCK的API编程开发的时候,
需要在项目中使用下面的三个文件否则会出现编译错误。
(1) WINSOCK.H: 这是WINSOCK API的头文件,
需要包含在项目中。
(2)WSOCK32.LIB: WINSOCK API连接库文件。
(3)WINSOCK.DLL: WINSOCK的动态连接库,
位于WINDOWS的安装目录下。
聊天系统的设计跟普通网站设计有着许多不同的地方,
普通网站设计所考虑的因素例如普通网站需要对布局进入大量美化以及动画设计等等
而聊天室只要提供满足访客双方直接实时聊天即可。
因此,在设计聊天系统的过程中,
必须要考虑好以下几个设计要点:
在Internet上的聊天程序一般都是以服务器提供服务端连接响应,
使用者通过客户端程序登录到服务器就可以与登录在同一服务器上的用户交谈
这是一个面向连接的通信过程。
因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。
为了利用重载套接字的消息相应函数 必须从CAsyncSocket派生出自己的套接字类,有时为了分开监听套接字和客户端套接字,还应该分别派生监听套接字类和客户端套接字类。
利用这两类函数就可以开始写网络通信程序。
整个过程可以分成三个阶段 连接建立 、数据传和拆除连接。
下面是Socket套接字介绍:
Winsock是一套开放的,支持多种协议的Windows下网络编程接口,是Windows网络编程实是上的标准.应用程序通过调用Winsock的API实现相互间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作。
套接字(Sockets)是通信的基石,是支持TCP/IP协议的网络通信的操作单元.可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的
上一篇:
基于VC的局域网聊天室任务书和开题报告
下一篇:
近三年来思想工作小结(德能勤绩廉)