网络视频聊天软件系统的设计与实现内容摘要:
此就造成了 MFC 对类封装中的一定程度的的冗余和迂回 ,但这是可以接受的 .. 最后要明白 MFC 不只是一个功能单纯的界面开发系统 ,它提供的类绝大部分用来进行界面开发 ,关联一个窗口的动作 ,但它提供的类中有好多类不与一个窗口关联 ,即类的作用不是一个界面类 ,不实现对一个窗口对象的控制 (如创建 ,销毁 ),而是一些在 WinDOS(用MFC 编写的程序绝大部分都在 WinDOS 中运行 )中实现内部处理的类 ,如数据库的管理类等 ,学 习中最应花费时间的是消息和设备环境 ,对 C++和 MFC 的学习中最难的部分是指针 ,C++面向对像程序设计的其它部分 ,如数据类型 ,流程控制都不难 ,建议学习数据结构C++版。 MFC 是微软封装了的 API。 什么意思呢。 windows 作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的 win32 开发(直接使用 windows的接口函数 API)对于程序员来说非常的困难,因为, API 函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。 MFC 是面向对象程序设计与 Application framework 的完美结合,他将传统的 API 进行了分类封装,并且为你创建了程序的一般框架, MFC 是对 WindowsAPI 的封装,大大简化了我们的工作;学 VC 主要就是要学 MFC,大约有 100 多个类,但常用的也就二三十个。 应该象背 4 级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。 如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。 重要的 MFC: CWnd:窗口,它是大多数 “ 看得见的东西 ” 的父类( Windows 里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图 CView、框架窗口 CFrameWnd、工具条 CToolBar、对话框 CDialog、按钮 CButton, etc。 一个例外是菜单( CMenu)不是从窗口派生的。 该类很大,一开始也不必学,知道就行了。 CDocument 文档,负责内存数据与磁盘的交互。 最重要的是 OnOpenDocument(读入 ),OnSaveDocument(写盘) ,Serialize(读写) CView 视图,负责内存数据与用户的交 互。 包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。 最重要的是 OnDraw(重画窗口 ),通常用 CWnd::Invalidate()来启动它。 另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。 你自己的许多功能都要加在里面,你打交道最多的就是它。 2020 届本科生毕业设计 第 6 页 CDC 设备文本。 无论是显示器还是打印机,都是画图给用户看。 这图就抽象为 CDC。 CDC 与其他 GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。 把 CDC 想象成一张纸,每个窗口都有一个 CDC 相联系,负责画窗口。 CDC 有个常用子类 CClientDC(窗口客户区),画图通常通过 CClientDC 完成。 CDialog 对话框 : CWinApp 应用程序类。 似于 C 中的 main 函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。 最常用函数 InitInstance():初始化。 CGdiObject 及子类 ,用于向设备文本画图。 它们都需要在使用前选进 DC。 CPen 笔,画线 CBrush 刷子,填充 CFont 字体,控制文字输出的字体 CBitmap 位图 CPalette 调色板 CRgn 区域,指定一块区域可以用于做特 殊处理。 CFile 文件。 最重要的不外是 Open(打开) ,Read(读入) ,Write(写) CString 字符串。 封装了 C 中的字符数组,非常实用。 CPoint 点,就是( x,y)对 CRect 矩形,就是( left,top,right,bottom) CSize 大小,就是( cx,cy)对(宽、高) MFC 是在 1992 年的 Microsoft 16 位版的 C/C++编译器的 版本中作为一个扩展轻量级的 Windows API 面向对象的 C++封装库而引入的。 此时, C++因为它在和 API 方面的卓越表现,刚刚 开始被用来取代 C应用于开发商用软件。 因此,他们推出了替代早期的老式的字符界面的集成开发环境( IDE)的 PWB。 有趣的是, MFC 使用 “ Afx” 作为所有的全局函数的前缀, “ afx” 作为全局变量的前缀。 因为在 MFC 的早期开发阶段它叫 “ Application Framework Extensions” 缩写为 “ AFX”。 AFX 提供了对 Windows API 的高度抽象,建立了全新的面向对象的 AFX API,但它对于新手来说太复杂了,所以 AFX 小组不得不重新开始。 后来他们创建了一组C++类,这就是 MFC。 MFC 这个名 字被采用得太晚了以至于没来得及修改这些引用。 最近, Visual Studio 2020 一起发布了; Visual Studio 2020一起发布。 在免费的 Express 版本的 Visual Studio 2020/2020 中没有包含 MFC。 作为一个强有力的竞争对手,为 Borland 的 Turbo C++编译器设计 OWL( Object Windows Library)在同一时间也发布了。 但最后, Borland 停止了对 OWL 的继续开发并且不久就从 Microsoft 那里购买了 MFC 头 文件,动态链接库等的授权,微软没有提供完整的 MFC 的集成支持。 之后 Borland 发布了 VCL( Visual Component Library)来替换 OWL 框架。 网络编程 套接口有三种类型 :流式套接口 ,数据报套接口及原始套接口 . 流式套接口定义了一种可靠的面向连接的服务 ,实现了无差错无重复的顺序数据传输 .数据报套接口定义了一种无连接的服务 ,数据通过相互独立的报文进行传输 ,是无序的 ,并且不保证可靠 ,无差错 .原始套接口允许对低层协议如 IP 或 ICMP 直接访问 ,主要用于新的 2020 届本科生毕业设计 第 7 页 网络协议实现的测试 等 . 无连接服务器一般都是面向事务处理的,一个请求一个应答就完成了客户程序与服务程序之间的相互作用。 若使用无连接的套接口编程,程序的流程可以用图 31 表示。 服务器 s oc ke t ( ) bi n d( ) r e a df r om ( ) s e n dt o( ) 阻塞,等待客户数据 处理服务请求 s oc ke t ( ) bi n d( ) s e n dt o( ) r e a df r om ( ) 客户机 服务请求 服务应答 图 3 1 无连接套接口应用程序时序图 c l os e ( ) c l os e ( ) 面向连接服务器处理的请求往往比较复杂,不是一来一去的请求应答所能解决的,而且往往是并发服务器。 使用面向连接的套接口编程 ,可以通过图 32 来表示其时序。 2020 届本科生毕业设计 第 8 页 服 务 器 s o c k e t ( ) b i n d ( ) l i s t e n ( )阻 塞 , 等 待 客 户 数 据处 理 服 务 请 求 s o c k e t ( ) c o n n e c t ( ) w r i t e ( )客 户 机请 求 数 据应 答 数 据图 3 2 面 向 连 接 套 接 口 应 用 程 序 时 序 图 r e a d ( ) r e a d ( ) a c c e p t ( ) w r i t e ( )建 立 连 接 c l o s e ( ) c l o s e ( ) 套接口工作过程如下 :服务器首先启动 ,通过调用 socket()建立一个套接口 ,然后调用bind()将该套接口和本地网络地址联系在一起 ,再调用 listen()使套接口做好侦听的准备 ,并规定它的请求队列的长度 ,之后就调用 accept()来接收连接 .客户在建立套接口后就可调用 connect()和服务器建立连接 .连接一旦建立 ,客户机和服务器之间就可以通过调用read()和 write()来发送和接收数据 .最后 ,待数据传送结束后 ,双方调用 close()关闭套接口。 由于 Windows 的基于消息的特点 ,WINSOCK 和 BSD 套接口相比 ,有如下一些新的扩充 : 异步选择函数 WSAAsyncSelect()允许应用程序提名一个或多个感兴趣的网络事件 ,如 FD_READ,FD_WRITE,FD_CONNECT,FD_ACCEPT 等等代表的网络事件 .当被提名的网络事件发生时 ,Windows 应用程序的窗口函数将收到一个消息 .这样就可以实现事件驱动了 . 异步请求函数允许应用程序用异步方式获得请求的信息 ,如 WSAAsyncGetXByY()类函数 . 这些函数是对 BSD 标准函数的扩充 .函数 WSACancelAsyncRequest()允许用 2020 届本科生毕业设计 第 9 页 户中止一个正在执行的异步请求 . WINSOCK 提供了 钩子函数 负责处理 Windows 消息 ,使 Windows 的消息循环能够继续 .WINSOCK 提 供 了 两 个 函 数 (WSASetBlockingHook() 和WSAUnhookBlockingHook()) 让 应用程 序设 置或取 消自己 的 钩子 函数 .函数WSAIsBlocking()可以检测是否阻塞 ,函数 WSACancelBlockingCall()可以取消一个阻塞的调用 . WINSOCK 提供了两个 WSAGetLastError()和 WSASetLastError()来获取和设置最近错误号 . 由于 Windows Sockets 的服务是以动态连接库 形式实现的 ,所以必须要先调用 WSAStartup()函数对 Windows Sockets DLL 进行初始化 ,协商 WINSOCK的版本支持 ,并分配必要的资源 .在应用程序关闭套接口后 ,还应调用 WSACleanup()终止对 Windows Sockets DLL 的使用 ,并释放资源 ,以备下一次使用 . 组件对象模型 (COM) 组件对象模型,也称组件对象模型,英文为 Component Object Model,缩写 COM,是 微软 对于 网页服务器 与客户端、增益集与 Office 系列软件之间交互的一项软件组件技术。 自动化是指应用程序的 COM 化来让外部可以调用它们的功能,以及外部调用这 些功能的方法。 自动化的典型应用是微软的很多软件中都支持的宏。 由于自动化普遍使用 OLE的标准接口来实现,所以这个技术有时也称 OLE 自动化。 COM是微软自 1993年便提出的组件式软件平台,用来做进程间通信( Interprocess munication, IPC)以及当作组件式软件开发的平台。 COM 提供跟编程语言无关的方法实现一个软件对象,因此可以在其他环境中运行。 COM 要求软件组件必须遵照一个共同的接口,该接口与实现无关,因此可以隐藏实现属性,并且被其他对象在不知道其内部实现的情形下正确的使用。 COM 并被实现于多个平台之上,并不限于 Windows 操作系统之上。 但还是只有Windows 最常使用 COM,且某些功能已被目前的 .NET 平台取代。 COM 是基于组件对象方式概念来设计的,在基础中,至少要让每个组件都可以支持二个功能: 1,查询组件中有哪些接口 2,让组件做自我生命管理,此概念的实践即为参考计数( Reference Counting) 这 二 个 功 能 即 为 COM 的根: IUnknown 接 口 所 提 供 的IUnknown::QueryInterface(), IUnknown::AddRef()及 IUnknown::Release()三个方法的由来。 所有的 COM 组件都要实现 IUnknown,表示每个 COM 组件都有相同的能力。 只由 COM 派生实现出来的组件,称为纯 COM 组件。 但在 Windows 持续发展时, Visual Basic 开始支持 OCX,也就是 OLE Custom Control,这让微软开始思考要如何让 COM 组件可以跨语言支持,在这样的要求下,必须要提供一个一致的接口,以及提供一 组可。网络视频聊天软件系统的设计与实现
相关推荐
being alone for a lone time, easily he will wallow in it and even fall in love with it. But in one’s mind, loneliness had never been a cheerful thing in his life. Being alone was the old man’s choice
V RL=LI = = 淮南师范学院电气信息工程系 自动化专业电子课程设计报告 第 11 页 单相 桥式整流电路 桥式整流电路是利用了二极管的单向导电性,将四个 二极管分为两组,根据变压器副边电压的极性分别导通,将变压器副边电压的正极端与负载电阻的上端相连,负极端与负载电阻的下端相连,使负载上始终得到一个单向的脉动电压,如图 : 图 单相桥式整流 桥式整流电路的工作原理 由图
L9110电机驱动电路 L9110芯片 L9110 是 电机驱动芯片。 它是 两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片 集成电路 之中,使外围器件成本降低,整机可靠性提高。 该芯片有两个 TTL/CMOS 兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过 750~800mA 的持续电流,峰值电流能力可达 ~ ;
”。 正是由于网络地址唯一性,才使 IPX/SPX 具有较强的路由功能。 在 IPX/SPX 协议中, IPX 是 NetWare 最底层的协议,它只负责数据在网络中的移动,并不保证数据是否传输成功,也不提供纠错服务。 IPX 在负责数据传送时,如果接收节点在同一网段内,就直接按该节点的 ID 将数据传给它;如果接收节点是远程的(不在同一网段内,或位于不同的局域网中),数据将交给 NetWare
2020 数据库知识,对大学所学的知识得以巩固和运用。 本次项目虽小,我却悟出了个简单的道理:学习东西就像软件开发一样,拿到一本书之后看看,提出自己未知的问题,进而分析该问题,读懂书学会去解决。 该网上 商城购物 系统虽然已基本上满足了要求,但还不够完善,在以后的使用过程中可能会暴露许多实 际问题,有待进一步的改进,完善。 通过这次毕业设计,我了解了软件开发的大体过程
客回执 缺货信息 ={缺货书籍名称 + 版次 + 作者 + 出版社 + 需要最少数量 } 订购图书信息 =未缺货书籍名称 + 数量 + 金额 新书预订成功信息 =新书名称 + 作者 + 出版社信息 + 数量 + 预付款金额 + 新书发售时间 订购信息处理结果 =[新书预订失败信息 | 新书预订成功信息 ] 优惠信息 =顾客等级 + 享受优惠折扣 订购信息处理结果 =[缺货信息 | 订购图书信息