1.用户界面原理和界面库编程模型

从最早的图形用户界面操作系统Apply Lisa,到空前的windows 1.0,再到最新的Windows、苹果、Linux操作系统,图形用户界面已经是个人电脑不可缺少的部分。图形用户界面的发展是建立在成熟的图形学基础上的,本系列文章主要依托Windows 平台下的C++界面库来揭秘图形界面库原理,全方位的展现Windows界面库的发展历程和一个界面库是如何构成的。采用C++是因为系统提供的原生图形界面编程接口都是基于C/C++的,其他的语言接口均是在此基础上做的包装,但是本文介绍的技术并不局限于Windows和C++,所有界面库的原理基本都是通用的。

用户界面原理

简单思考下图形用户界面是什么?如下,做过DOS下图形界面的,很容易发现图形用户界面的基本元素就是线框,现代界面也只是在此基础上加上各种阴影、圆角、填充等等,而处理鼠标和界面交互的原理就是判断鼠标和这些线框的位置关系。实际上Window 3.1之前,整个图形界面的底层还是跑在DOS上。

再思考下,电脑屏幕能够显示图像的原理是什么呢?如下,将屏幕做个简化,就类似LED显示屏,每个像素对应一个显示LED,显示对应的图像就是将图像栅格化后按照颜色设置对应像素点像素值,只不过CRT或液晶显示屏的像素密度更高,刷新频率更高而已。

 虽然显示原理是栅格化,但是实际显示时我们不可能手动去输入栅格化后的点阵,因此必须有一种方法把图形界面的各种基本元素直线、曲线、圆、椭圆、字体等映射为栅格化点阵,这就是图形学研究的内容,事实上图形界面的发展和图形学发展是离不开的。用户界面的实现包括底层驱动的支持和应用层的支持,一般驱动层支持基本图形元素的绘制,应用层再包装来支持复杂图形绘制。现代操作系统图形绘制常用基本元素基本都已经集成到驱动中,绘制效率非常高,而且针对一些特殊图形绘制做了优化,在游戏等对绘制效率和2D/3D特效要求高的场景,现代显卡都针对OpenGL和DirectX等在驱动层做了优化,Windows更是将图形子系统移到内核模式(如下)。

 

既然显卡驱动提供了基本元素的显示,那么为了完成用户界面我们需要做的就是调用这些基本元素,绘制图形界面,然后监听用户操作事件作出对应响应即可,这就是操作系统负责做的事情。其实原理就是这么简单,看看最原始windows (如下),实际上也就是这么简单封装。

界面库编程模型

那么界面库的作用是什么?经典Windows中基本功能放在两个模块中——user32.dll和gdi32.dll,前者提供窗口创建和消息传递监听,后者提供直线、曲线、圆等元素绘制功能,这也是现在通用界面库提供的基本功能,在这些功能基础上用户即可构建自己的界面程序,界面库的功能在于提供接口给开发者,开发者按照指定的模式绘制和填充事件响应即可完成界面程序编写。因此常见的编程模型如下:

设计和创建界面:对于系统原生界面库来说,一般是代码创建,一些高级界面库(Qt、WPF等)支持从xml/xaml创建,web前端使用html声明创建。

循环等待和分发事件:这和具体的实现和场景有关系,Win32是基于消息循环,Qt中抽象成了信号槽事件循环,他们都是在主线程中响应事件,而java的awt、前端dom事件等为了安全和界面响应敏捷,将事件分发到了一个单独线程中,用户都是在另外线程中响应事件。

 

文中相关图片均引用自互联网,如有侵权请留言说明。

原创,转载请注明来自http://blog.csdn.net/wenzhou1219

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
第 1章 概述 1 1.1 网络编程相关的基本概念 1 1.1.1 网络编程与进程通信 1 1.1.2 Internet中网间进程的标识 3 1.1.3 网络协议的特征 7 1.2 三类网络编程 10 1.2.1 基于TCP/IP协议栈的网络编程 10 1.2.2 基于WWW应用的网络编程 10 1.2.3 基于.NET框架的Web Services网络编程 10 1.3 客户机/服务器交互模式 13 1.3.1 网络应用软件的地位和功能 13 1.3.2 客户机/服务器模式 14 1.3.3 客户机与服务器的特性 15 1.3.4 容易混淆的术语 16 1.3.5 客户机与服务器的通信过程 16 1.3.6 网络协议与C/S模式的关系 17 1.3.7 错综复杂的C/S交互 17 1.3.8 服务器如何同时为多个客户机服务 18 1.3.9 标识一个特定服务 20 1.4 P2P模式 21 1.4.1 P2P技术的兴起 21 1.4.2 P2P的定义和特征 21 1.4.3 P2P的发展 22 1.4.4 P2P的关键技术 22 1.4.5 P2P系统的应用与前景 22 习题 23 第 2章 套接字网络编程基础 24 2.1 套接字网络编程接口的产生与发展 24 2.1.1 问题的提出 24 2.1.2 套接字编程接口起源于UNIX操作系统 25 2.1.3 套接字编程接口在Windows和Linux操作系统中得到继承和发展 25 2.1.4 套接字编程接口的两种实现方式 25 2.1.5 套接字通信与UNIX操作系统的输入/输出的关系 26 2.2 套接字编程的基本概念 27 2.2.1 什么是套接字 27 2.2.2 套接字的特点 28 2.2.3 套接字的应用场合 30 2.2.4 套接字使用的数据类型和相关的问题 30 2.3 面向连接的套接字编程 32 2.3.1 可靠的传输控制协议 32 2.3.2 套接字的工作过程 33 2.3.3 面向连接的套接字编程实例 34 2.3.4 进程的阻塞问题和对策 40 2.4 无连接的套接字编程 43 2.4.1 高效的用户数据报协议 43 2.4.2 无连接的套接字编程的两种模式 43 2.4.3 数据报套接字的对等模式编程实例 45 2.5 原始套接字 47 2.5.1 原始套接字的创建 47 2.5.2 原始套接字的使用 48 2.5.3 原始套接字应用实例 49 习题 51 第3章 WinSock编程 53 3.1 WinSock概述 53 3.2 WinSock函数 55 3.2.1 WinSock的注册与注销 55 3.2.2 WinSock的错误处理函数 58 3.2.3 主要的WinSock函数 61 3.2.4 WinSock的辅助函数 74 3.2.5 WinSock的信息查询函数 77 3.2.6 WSAAsyncGetXByY类型的扩展函数 79 3.3 网络应用程序的运行环境 82 习题 84 第4章 MFC编程 85 4.1 MFC概述 85 4.1.1 MFC是一个编程框架 85 4.1.2 典型的MDI应用程序的构成 87 4.2 MFC和Win32 89 4.2.1 MFC对象和Windows对象的关系 89 4.2.2 几个主要的类 91 4.3 CObject类 95 4.3.1 CObject类的定义 95 4.3.2 CObject类的特性 96 4.4 消息映射的实现 98 4.5 MFC对象的创建 102 4.5.1 MFC对象的关系 102 4.5.2 MFC提供的接口 104 4.5.3 MFC对象的创建过程 104 4.6 应用程序的退出 107 习题 107 第5章 MFC WinSock类的 编程 109 5.1 CAsyncSocket类 110 5.1.1 使用CAsyncSocket类的一般步骤 110 5.1.2 创建CAsyncSocket类对象 111 5.1.3 关于CAsyncSocket类可以接受并处理的消息事件 112 5.1.4 客户端套接字对象请求连接到服务器端套接字对象 114 5.1.5 服务器接收客户机的连接请求 115 5.1.6 发送与接收流式数据 116 5.1.7 关闭套接字 118 5.1.8 错误处理 118 5.1.9 其他成员函数 119 5.2 CSocket类 120 5.2.1 创建CSocket对象 120 5.2.2 建立连接 120 5.2.3 发送和接收数据 120 5.2.4 CSocket类、CArchive类和CSocketFile类 121 5.2.5 关闭套接字和清除相关的对象 122 5.3 CSocket类的编程模型 122 5.4 用CAsyncSocket类实现聊天室程序 123 5.4.1 实现目标 123 5.4.2 创建客户端应用程序 124 5.4.3 客户端程序的类与消息驱动 134 5.4.4 客户端程序主要功能的代码和分析 135 5.4.5 创建服务器端程序 142 5.4.6 服务器端程序的流程和消息驱动 144 5.4.7 点对点交谈的服务器端程序主要功能的代码和分析 145 5.5 用CSocket类实现聊天室程序 151 5.5.1 聊天室程序的功能 151 5.5.2 创建聊天室的服务器端程序 151 5.5.3 聊天室服务器端程序的主要实现代码和分析 154 5.5.4 创建聊天室的客户端程序 162 5.5.5 聊天室客户端程序的主要实现代码和分析 163 习题 170 实验 170 第6章 WinInet编程 172 6.1 MFC WinInet类 172 6.1.1 概述 172 6.1.2 MFC WinInet所包含的类 173 6.1.3 使用WinInet类编程的一般步骤 174 6.1.4 创建CInternetSession类对象 175 6.1.5 查询或设置Internet请求选项 176 6.1.6 创建连接类对象 177 6.1.7 使用文件检索类 178 6.1.8 重载OnStatusCallback函数 179 6.1.9 创建并使用网络文件类对象 180 6.1.10 CInternteException类 183 6.2 用MFC WinInet类实现FTP客户端 183 6.2.1 程序要实现的功能 183 6.2.2 创建应用程序的过程 184 习题 186 实验 187 第7章 WinSock的多线程 编程 188 7.1 WinSock为什么需要多线程编程 188 7.1.1 WinSock的两种I/O模式 188 7.1.2 两种模式的优缺点及解决方法 189 7.2 Win32操作系统下的多进程多线程机制 189 7.2.1 Win32 OS是单用户多任务的操作系统 189 7.2.2 Win32 OS是支持多线程的操作系统 190 7.2.3 多线程机制在网络编程中的应用 191 7.3 VC++对多线程网络编程的支持 192 7.3.1 MFC支持的两种线程 192 7.3.2 创建MFC的工作线程 193 7.3.3 创建并启动用户界面线程 195 7.3.4 终止线程 198 7.4 多线程FTP客户端实例 200 7.4.1 编写线程函数 200 7.4.2 添加事件处理函数 206 习题 208 第8章 WinSock的I/O模型 209 8.1 select模型 210 8.2 WSAAsyncSelect异步I/O模型 212 8.3 WSAEventSelect事件选择模型 216 8.4 重叠I/O模型 221 8.4.1 重叠I/O模型的优点 221 8.4.2 重叠I/O模型的基本原理 221 8.4.3 重叠I/O模型的关键函数和数据结构 222 8.4.4 使用事件通知实现重叠模型的步骤 225 8.4.5 使用完成例程实现重叠模型的步骤 227 8.5 完成端口模型 229 8.5.1 什么是完成端口模型 229 8.5.2 使用完成端口模型的方法 230 习题 238 第9章 HTTP及编程 239 9.1 HTTP 239 9.1.1 HTTP的背景 239 9.1.2 HTTP的内容 240 9.1.3 HTTP消息的一般格式 242 9.1.4 HTTP请求的格式 243 9.1.5 HTTP响应的格式 245 9.1.6 访问认证 248 9.1.7 URL编码 249 9.1.8 HTTP的应用 250 9.2 利用CHtmlView类创建Web浏览器型的应用程序 250 9.2.1 CHtmlView类与WebBrowser控件 250 9.2.2 CHtmlView类的成员函数 251 9.2.3 创建一个Web浏览器型的应用程序的一般步骤 256 9.3 Web浏览器应用程序实例 261 9.3.1 程序实现的目标 261 9.3.2 创建实例程序 262 习题 265 实验 265 第 10章 电子邮件协议与编程 267 10.1 电子邮件系统的工作原理 267 10.1.1 电子邮件的特点 267 10.1.2 电子邮件系统的构成 267 10.1.3 电子邮件系统的实现 268 10.2 简单邮件传送协议 270 10.2.1 概述 270 10.2.2 SMTP客户机与SMTP服务器之间的会话 270 10.2.3 常用的SMTP命令 271 10.2.4 常用的SMTP响应码 273 10.2.5 SMTP的会话过程 274 10.2.6 使用WinSock来实现电子邮件客户机与服务器的会话 274 10.3 电子邮件信件结构详述 275 10.3.1 Internet文本信件的格式标准——RFC 822 275 10.3.2 信件的头部 276 10.3.3 构造和分析符合RFC 822标准的电子信件 281 10.4 MIME编码解码与发送附件 281 10.4.1 MIME概述 281 10.4.2 MIME定义的新的信头字段 282 10.4.3 MIME邮件的内容类型 283 10.4.4 MIME邮件的编码方式 292 10.5 POP3与接收电子邮件 294 10.5.1 POP3 294 10.5.2 POP3的会话过程 294 10.5.3 POP3会话的3个状态 295 10.5.4 POP3标准命令 296 10.5.5 接收电子邮件的一般步骤 298 10.6 接收电子邮件的程序实例 299 10.6.1 实例程序的目的和实现的技术要点 299 10.6.2 创建应用程序的过程 301 10.7 发送电子邮件的程序实例 302 10.7.1 实例程序的目的和实现的技术要点 302 10.7.2 创建应用程序的过程 303 习题 305 参考文献 307
数据课程设计报告 酒店管理系统的设计 系 部 信息工程系 专 业 计算机软件专业 班 级 学 号 ____________ 姓 名 _______________课 题 _____________ 指导教师 报告成绩______________ 目 录 1 课程设计目的及要求 1 2 课程设计的主要内容 1 3数据设计 1 3。1 需求分析 1 3。1.1对功能的需求 1 3。1。2数据流图 2 3.1。3 数据字典 4 3.2概念设计 6 3。2。1实体E—R图 6 3.2。2概念设计的总体E—R图 9 3。3逻辑设计 9 3。4物理设计 10 4程序模块设计 11 4。1 用户登录模块设计 11 4。1。1用户界面模块分析 11 4。1。2运行结果 12 4.2 住宿管理模块设计 13 4.2.1住宿管理模块分析 13 4.2。2运行结果 14 4.3 消费模块设计 15 4.3。1消费模块分析 15 4.3。2运行结果 15 5 小结 16 酒店管理系统系统的设计 1 课程设计目的及要求 数据课程设计是为数据原理及应用课程而独立开设的实践性课程。数据课程设 计对于巩固数据知识,加强学生的实际动手能力和提高学生综合素质十分必要.本课程 分为系统分析与数据设计、应用程序设计和系统集成调试三个阶段进行. 数据课程设计的主要目标是: a.加深对数据系统、程序设计语言的理论知识的理解和应用水平. b。通过设计实际的数据系统应用课题,进一步熟悉数据管理系统的操作技术,提 高动手能力,提高分析问题和解决问题的能力. 2 课程设计的主要内容 系统分析与数据设计阶段 a。 通过社会调查,选择一个实际应用数据系统的课题。 b。进行系统需求分析和系统设计,写出系统分析和设计报告. c.设计数据模型并进行优化,确定数据结构、功能结构和系统安全性和完整性要求 。 应用程序设计阶段 a。完成数据定义工作,实现系统数据的数据处理和数据录入。 b。实现应用程序的设计、编程、优化功能,实现数据安全性、数据完整性和并发控制 技术等功能,并针对具体课题问题提出解决方法。 c。系统集成调试阶段 对系统的各个应用程序进行集成和调试,进一步优化系统性能,改善系统用户界面. 3数据设计 3。1 需求分析 3.1.1对功能的需求 a。系统帐号管理 第一次用一个管理员账号(系统给定)登陆,登陆成功后,可以设置其他用户,包括密 码、权限等。 b。消费管理 为消费客户查询并分配餐桌,纪录客户用餐情况并结帐。 c。住宿管理 为住宿客户查询并分配房间,纪录客户住宿情况并结帐。 3。1。2数据流图 绘制数据流程图的目的是为了方便开发人员与用户的交流,以及为系统的设计提供依 据。数据流程图的绘制过程通常采用自顶向下,逐层分解,直到功能细化为止,形成若干 层次的数据流程图。酒店管理系统的数据流程图如下所示: 顶层: 图3—1 酒店管理系统顶层数据流图 0层: 图3—2酒店管理系统0层数据流图 1层: 2号图: 3号图: 4号图: 图3—3酒店管理系统1层数据流图 3。1。3 数据字典 该系统具体功能模块以数据字典表示如下: 数据字典(DD,Data Dictionary):是以特定格式记录下来的、对系统的数据流程图中各个基本要素(数据 流、加工、存储和外部项)的内容和特征所作的完整的定义和说明。数据字典是对数据 流程图的重要补充和说明。现简要列出本系统的部分数据字典。 a.外部实体卡片的定义,如表3—4所示。 表3—4 外部实体条目 "名称:顾客 总编 " "号:1-001 " "说明:客户 编 " "号:001 " "输入数据流:无 " "输出数据流:无 " "名称:管理员 " "总编号:1-002 " "说明:管理员 " "编 号:002 " "输入数据流:登陆信息 " "输出数据流:无 " b.处理过程卡片的定义,如表3-5所示。 表3—5 处理过程条目 "名称:管理员信息查看 总 " "编号:2-001 " "别名:提交登录请求后,查看管理员信息 " "编 号:P1。2 " "数据流来源:D1 " "数据流去向:管理员 " "名称:消费品信息查看 " "总编号:2-002 " "别名:无 " "编 号:P2。1 " "数据流来源:D2 " "数据流去向:客户、管理员 " "名称:预定客房审核 " "总编号:2-003 " "别名:客户提交未审核订单,管理员审核 " "编 号:P3。2 " "数据流来源:P3。1 " "数据流去向:管理员、D4 " "名称:客房信息查看 " "总编号:2-004 " "别名:无 " "编 号:P4.1 " "数据流来源:D5 " "数据流去向:管理员、客户 " c。数据流卡片的定义,如表3—6所示。 表3-6 数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值