GIS界面设计.doc_第1页
GIS界面设计.doc_第2页
GIS界面设计.doc_第3页
GIS界面设计.doc_第4页
GIS界面设计.doc_第5页
免费预览已结束,剩余65页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 摘 要 所有的 GIS Geographical Information Systems 操作都要通过 软件界面来进行 专业化 友好易用的 GIS 软件界面既可以体现 GIS 软件的专业特性又能给用户以直观简洁的艺术享受 好的软件界面可 以有效的提高软件的外在品质 可以给人很好的第一印象 GIS 界面设 计开发不仅要考虑充分发挥 Windows 的特点 同时还需顾及许多用户 的习惯于类 CAD 的菜单操作方式 因此应采用工具箱与菜单配合使用 的方式 本文将涉及利用 VC 面向对象程序设计思想 软件工程的思 想 Windows 消息处理机制及 MFC 文档视图结构等 来完成界面的设计 关键词 GIS GUI VC MFC 面向对象 2 Abstract Nearly all the operations in a Geographical Information Systems GIS software will be carries out effectively by using its graphical user interface GUI objects Professional GUI objects of a GIS software not only embodies all its best qualities but also gives customers instructions and artistic enjoyment A good interface can improve the software to a more desirable or more excellent quality meanwhile gives customers a favorable first impression During the designing of a GIS interface you should make good use of the characteristics of the Microsoft Windows operating system and consider the most users operational habits just like in using CAD systems So the easiest way is using toolboxes and menus In this thesis focusing on the GIS interface designing and programming introduces the great ideal Object Oriented Design based on the Microsoft Visual C environment the Object Oriented Software Engineering ideals the Message disposal mechanism and the Document View Framework of Microsoft Foundation Class KeywordsKeywords Microsoft Foundation Class Geographical Information System Object Oriented Programming 3 目 录 摘摘 要要 1 1 目目 录录 3 3 1 1引言引言 5 5 1 1 GIS 界面设计意义 5 1 2 界面设计研究的现状 6 1 2 1 简易工具 Easy to Use Tools 7 1 2 2 示范工具 Demonstrational Tools 7 1 2 3 基于模型的工具 Model Based Tools 7 1 2 4 智能工具 Interlligent Tools 8 1 2 5 面向对象工具 Object Oriented Tools 8 1 3 开发工具的选择 12 1 3 1 由 GIS 软件界面决定的 12 1 3 2 由使用效果决定的 13 1 3 3 由功能决定的 13 2 2 GISGIS 界面的特点界面的特点 1414 2 1 以用户为中心的人机界面 14 2 1 1 GIS 的用户分析 14 2 1 2人机交互方式 15 2 1 3 GIS 用户界面的设计原则 16 2 2设计与开发的特殊性 17 2 2 1需求阶段 18 2 2 2分析设计阶段 18 2 2 3调研验证阶段 19 2 2 4方案改进阶段 19 2 2 5用户验证阶段 20 2 3GIS 用户界面的设计内容 20 2 3 1GIS 输入设计 20 2 3 2GIS 输出设计 21 3 3 GISGIS 界面程序设计界面程序设计 2323 3 1用户界面的基本要素 窗口 23 3 1 1创建一个窗口 24 4 3 1 2销毁一个窗口 25 3 2MFC 的类 26 3 3消息传输机制 28 4 4 总结与展望总结与展望 3030 5 5源代码分析与测试源代码分析与测试 3232 参考文献参考文献 5050 致谢致谢 6666 5 1引言 1 1 GIS 界面设计意义 GIS 是为特定应用目标建立的空间信息系统 是在计算机硬件 软件及网 络支持下 对有关空间数据进行预处理 输入 存储 查询检索 处理 分析 显示 更新和提供应用的一门技术 这种 G 与 IS 的结合即地学与计算机科学的 结合就导致了地理信息系统是存储和处理与地理空间分布有关信息的集合 它 由四部分构成 即软硬件 地理空间数据和人员 其核心部件是软硬件系统 而最有创造性的部件无疑是人 而 GIS 界面则是沟通人与系统之间的桥梁 GIS 软件的图形界面是与用户直接交互的平台 几乎所有的 GIS 操作都要通过软件 界面来进行 专业化 友好易用的 GIS 软件界面既可以体现 GIS 软件的专业特 性又能给用户以直观简洁的艺术享受 这是因为用户界面 UI 被看作计算机 科学的六大核心领域之一 它是任何交互系统中至为重要和关键的部件之一 用户能够见到的软件部件主要就是显示在屏幕上的人机界面 对于用户来讲 如果他们在屏幕上看到的画面是笨拙的 反应迟钝 难以使用的 那么他们有 理由认为 这种系统是质量低劣的 不可能成为受用户青眯的软件产品 另一 方面 随着人们对人机界面必要性的理解和开发高质量的 具有新型人机交互 技术的软件已成为当务之急 人机界面的开发几乎无一例外地成为系统设计与 实现中最为困难费时的 瓶颈 研究表明 在软件开发中有近 50 的开发时间 和软件代码是关于用户界面的 可见软件界面的开发在整个软件中占有相当大 的比例 另外 从内外结构来说 应用软件系统都是由内部数据模型和外部用 户界面组成 其中内部数据模型代表了软件所处理问题的内在逻辑结构和关系 外部用户界面是支持用户实现所处理问题的逻辑和功能需要和手段 这种软件 构成的观点 一方面反映了现今应用软件设计和实施的基本状况 例如客户 服 6 务器 基于组件的多层结构 其中的客户端就集中体现了外部用户界面的特性 另一方面也体现了关于软件体系结构的四视图观点 该观点把软件体系结构看 成是由四种描述而构成的 它们是 概念结构 Conceptual Architecture 模块结构 Module Architecture 代码结构 Code Architecture 运行结 构 Execution Architecture 所以对一个应用软件系统 尤其是对 GIS 软件 来说 作为内部数据模型作用的诸如数据库系统固然是十分重要的 但实现各 类操作的 GIS 界面也是不可缺少的 对开发者来说有效的界面设计经常是预见的过程 设计目标是开发者根据 自己对用户需求的理解而制定的 在设计用户界面时要考虑的最重要的因素是 用户的期望 所以从软件工程的思想出发来设计界面将是个不错的选择 现在 软件工程技术已经发展到从用户需求出发 实现软件设计自动化 使软件设计 开发摆脱缺乏规范和统一性的手工作业方式 它将使我们的界面设计包括需求 分析和获取 系统设计和代码实现等步骤 1 2 界面设计研究的现状 早在上世纪 70 年代 人们就已经开始了对用户界面开发的研究 用户界面 领域的研究对软件开发的发展产生了很大的影响 在那个年代斯坦福研究协会 Stanford Research Institute Xerox PAPC 等 现在 界面创建工具被广 泛应用于商业软件的开发中 在 HyperTalk 和 VC 中经常使用的事件语言也是出 自于此 下面所列的就是界面研究发展的成果 窗口管理器和工具包 Windows Managers and Toolkits 事件语言 Event Languages 互操作图形工具 InteractiveGraphic Tools 组件系统 Component Systems 脚本语言 Scripting Language 超文本 Hypertext 面向对象编程 Object Oriented Programming 用户界面的开发工具在软件开发中发挥的作用是不可忽视的 开发人员使 7 用这种工具可以设计和实现用户界面 现在几乎所有的应用开发都要使用用户 界面开发工具 界面开发工具能减少开发人员在开发界面时的工作量 同时能 够加速界面的开发 从而可以加速系统原型的开发 促使开发人员不断改进设 计 获得高质量的用户界面 另一个好处就是使得所开发的软件具有相似的界 面 让用户不必花费过多的力气去学习使用新系统 到现在为止 人们已经开发出很多用户界面开发工具 使用这些界面开发 工具人们可以方便快捷地创建出用户界面 根据所查阅的资料 它们大致可以 分为以下几种 1 2 1 简易工具 Easy to Use Tools 大多数工具需要几个星期的学习时间 并且不能够移植到不同的平 而简 易工具则与之不同 简单易学 而且可移植 如 SUIT the Simple User Inerface Toolkit 是一个简单的用户界面工具包 它具有简易性和可移植性 利用这种工具 程序员可以快速构建 GUI SUIT 是一种 Pascal 的用户界面工 具包 1 2 2 示范工具 Demonstrational Tools 这种工具基本上是使用示范技术 the technique of demonstration 来记录动作或者创建宏 例如 Emacs SmallStar 等 或者使用示范技术而不需 要编程来创建特定应用的图形对象 如 Lapidary 而现在人们又开始尝试使 用示范技术来开发完全的用户界面 1 2 3 基于模型的工具 Model Based Tools 具有代表性的基于模型的工具有 UEDE the User Interface Design 8 Environmeng HUMANDOID TACTICS 和 MASTERMIND 它们通过创建模型来 分别从不同的角度描述用户界面 UIDE 为开发者提供了良好的界面 方便易用 在 UIDE 中应用的语言是用 来定义应用的语法 而不是界面的语法 它包括操作的前后条件 系统使用这 些操作可以自动生成界面 HUMANOID 的设计模型从 5 个方面来描述应用的功能和界面的特点 分别是 应用的语义设计 application semantics design 表示 presentation 操作 manipulation 序列 sequencing 行为的副作用 action side effect HUMANMOID 提供了一系列基于约束的设计选择 设计者可以自由选择 其中的一种 TAXTICS 是另一种基于模型的工具 它所基于的应用模型约束类似于 UIDE 设计控件转换模型也类似于 HUMANOID 然而 它把应用模型扩展开来 添加上了附加的关系来连接不同的对象和他们的属性 以及行为参数之间的关 系 它抓住了所有的有效用户界面设计空间 将复合模型变成了转换模型 它 支持更复杂的变化 而这是 HUMANOID 所不能支持的 而 MASTERTMIND 则支持 三种模型 1 2 4 智能工具 Interlligent Tools 智能工具利用应用模型的一些表达方式生成界面 而不需要设计者特意去 定义界面的确切分布 这些工具有的是利用应用命令中的规约创建表达方式和 对话框 例如 Uofa 和 Mickey 还有就是使用 ER Entity Relationship 数据 模型创建与界面标准一致的界面 它使用基于知识的规则描述界面的属性 如 GENIUS 智能工具的缺点在于缺乏其他工具的灵活性 9 1 2 5 面向对象工具 Object Oriented Tools 通常使用使用面向对象程序 OOP 来创建的工具可以称为面向对象工具 面向对象设计重点在于对象 是对象构成了程序 而不是函数和数据 一个对 象可以表达真实生活中的某个概念 诸如汽车或太阳系 也可以表达抽象的东 西 OOP 是由创建这些对象并使得他们协调工作而构成的 你可以使用 OOP 创 建一个完全实用的程序 也可以供应一个对象的集合以向别人提供服务 你所 创建的对象的用户 或客户 可以是你自己 也可以是其他人 面向对象有以 下 3 个特性 1 对象 特性 行为 1 表达真实生活中的某个概念的可以称为对象 它是一般意义上的抽象 而 把那些在各方面都一样的对象归在一起 就构成对象的类 很明显类比对象更 加抽象 类描述了一组有相同特性 数据元素 和相同行为 函数 的对象 类实际上就是数据类型 例如 浮点数也有一组特性和行为 区别在于程序员 定义类是为了与具体问题相适应 而不是被迫使用已存在的数据类型 这些已 存在的数据类型的设计动机仅仅是为了描述机器的存储单元 程序员可以通过 增添他所需要的新数据类型来扩展这个程序设计语言 该程序设计系统欢迎创 建 关注新的类 对它们进行与内部类型一样的类型检查 这种方法并不限于 去模拟具体问题 尽管不是所有的人都同意 但大部分人相信 任何程序都模 拟所设计系统 O O P技术能很容易地将大量问题归纳成为一个简单的解 这一 发现产生了大量的O O P语言 其中最著名的是S m a l l t a l k C 之前 最成功的O O P语言 抽象数据类型的创建是面向对象程序设计中的一个基本概 念 抽象数据类型几乎能像内部类型一样准确工作 程序员可以创建类型的变 量 在面向对象程序设计中称为 对象 或 实例 并操纵这些变量 称为发 送 消息 或 请求 对象根据发来的消息知道需要做什么事情 对象可以 10 很好地表示界面上的元素 支持直接操作 对象提供了一个很好的抽象机制 包含了状态和操作 实验表明使用面向对象语言编写的用户界面更加易于开发 和维护 对象与互操作的对象和抽象对象的形式 可以将应用代码和用户界面 分离 互操作对象实现用户界面 而抽象对象实现界面之下的数据 2 继承 类型关系 类型不仅仅说明一组对象上的约束 还说明与其他类型之间的关系 两个类型 可以有共同的特性和行为 但是 一个类型可能包括比另一个类型更多的特性 也可以处理更多的消息 或对消息进行不同的处理 继承表示了基本类型和派 生类型之间的相似性 一个基本类型具有所有由它派生出来的类型所共有的特 性和行为 程序员创建一个基本类型以描述系统中一些对象的思想核心 由这 个基本类型派生出其他类型 表达了认识该核心的不同途径 例如 垃圾再生 机要对垃圾进行分类 这里基本类型是 垃圾 每件垃圾有重量 价值等等 并且可以被破碎 融化或分解 这样 可以派生出更特殊的垃圾类型 它们可 以有另外的特性 瓶子有颜色 或行为 铝可以被压碎 钢可以被磁化 另外 有些行为可以不同 纸的价值取决于它的种类和状态 程序员可以用继承建立 类的层次结构 在该层次结构中用类型术语来表述他需要解决的问题 第二个 例子是经典的形体问题 可以用于计算机辅助设计系统或游戏模拟中 这里基 本类型是 形体 每个形体有大小 颜色 位置等 每个形体能被绘制 擦除 移动 着色等 由此 可以派生出特殊类型的形体 圆 正方形 三角形等 它们中的每一个都有另外的特性和行为 例如 某些形体可以翻转 有些行为 可以不同 计算形体的面积 类型层次结构既体现了形体间的类似 又体现了 它们之间的区别 用与问题相同的术语描述问题的解是非常有益的 这样 从 问题描述到解的描述之间就不需要很多中间模型 程序语言解决大型问题 就 需要中间模型 面向对象之前的语言 描述问题的解不可避免地要用计算机术 语 使用对象术语 类型层次结构是主要模型 所以可以从现实世界中的系统 11 描述直接进入代码中的系统描述 实际上 使用面向对象设计 人们的困难之 一是从开始到结束过于简单 一个已经习惯于寻找复杂解的 训练有素的头脑 往往会被问题的简单性难住 3 多态性 当处理类型层次结构时 程序员常常希望不把对象看作是某一特殊类型的 成员 而把它看作基本类型成员 这样就可以编写不依赖于特殊类型的代码 在形体例子中 函数可以对一般形体进行操作 而不关心它们是圆 正方形还 是三角形 所有的形体都能被绘制 擦除和移动 所以这些函数能简单地发送 消息给一个形体对象 而不考虑这个对象如何处理这个消息 这样 新添类型 不影响原来的代码 这是扩展面向对象程序以处理新情况的最普通的方法 例 如 可以派生出形体的一个新的子类 称为五边形 而不必修改那些处理一般 形体的函数 通过派生新子类 很容易扩展程序 这个能力很重要 因为它极 大地减少了软件维护的花费 所谓 软件危机 正是由软件的实际花费远远超 出人们的想象而产生的 如果试图把派生类型的对象看作它们的基本类型 圆 看作形体 自行车看作车辆 鸬鹚看作鸟 就有一个问题 如果一个函数告诉 一个一般形体去绘制它自己 或者告诉一个一般的车辆去行驶 或者告诉一只 一般的鸟去飞 则编译器在编译时就不能确切地知道应当执行哪段代码 同样 的问题是 消息发送时 程序员并不想知道将执行哪段代码 绘图函数能等同 地应用于圆 正方形或三角形 对象根据它的特殊类型来执行合适的代码 如 果增加一个新的子类 不用修改函数调用 就可以执行不同的代码 编译器不 能确切地知道执行哪段代码 那么它应该怎么办呢 在面向对象的程序设计中 答案是巧妙的 编译器并不做传统意义上的函数调用 由非OOP编译器产生的函 数调用会引起与被调用代码的 早捆绑 早捆绑意味着编译器对特定的函数名 产生调用 而连接器确定调用执行代码的绝对地址 对于OOP 在程序运行之前 编译器不确定执行代码的地址 所以 当消息发送给一般对象时 需要采用其 12 他的方案 为了解决这一问题 面向对象语言采用 晚捆绑 的思想 当给对象发送消息 时 在程序运行之前不去确定被调用的代码 编译器保证这个被调用的函数存 在 并完成参数和返回值的类型检查 但是它不知道将执行的准确代码 为了 实现晚捆绑 编译器在真正调用的地方插入一段特殊的二进制代码 通过使用 存放在 对象自身中的信息 这段代码在运行时计算被调用函数的地址这样 每个对象 就能根据一个指针的内容有不同的行为 当一个对象接收到消息时 它根据这 个消息判断应当做什么 程序员可以用关键字Virtual表明他希望某个函数有晚 捆绑的灵活性 而并不需要懂得Virtual的使用机制 没有它 就不能用C 做面向对象的程序设计 Virtual 函数 虚函数 表示允许在相同家族中的类 有不同的行为 这些不同是引起多态行为的原因 综上所述 对象可以很好地表示界面上的元素 并支持他们的直接操作 对象提供了一个很好的抽象机制 包含了状态和操作 这样一来使用面向对象 语言编写的用户界面更加易于开发和维护 对象与互操作的对象和抽象对象的 形式 可以将应用代码和用户界面分离 互操作对象实现用户界面 而抽象对 象实现界面之下的数据 使用面向对象技术的另一个用处是易于获得组成用户 界面的不同部件间的统一性 在用户界面的所有对象间保持同样的协议会带来 应用和界面间的分离 因为应用不需要知道界面是如何实现的 它是一种普通 使用的面向对象工具包 它将互操作对象和抽象对象分开 它也提供了组合对 象机制来生成新的对象 其中所有的界面对象 菜单 按钮等 是从一个基类 继承而来 1 3 开发工具的选择 面向对象语言提供了一个很好的抽象机制 编写的用户界面也更加易于 13 开发和维护 使用面向对象编程语言将是一个很好的选择 我选择了 Visual C 理由如下 1 3 1 由 GIS 软件界面决定的 纵观 GIS 界面最常见的有三类 菜单式 命令式 表格式界面 它们全都 有一般 Windows 风格所特有的的菜单 工具栏和状态栏等 另外 还有操作所 需的视 这涉及到 Windows 应用程序设计 而 Visual C 开发平台提供了许多 开发 Windows 应用程序的工具可以方便快捷地实现 GIS 界面的设计 1 3 2 由使用效果决定的 Visual C 是一种面向对象的可视化编程工具 它提供的 AppWizard 能自 动生成应用程序的标准框架 大大减轻了编程的工作量 但是 由于生成的应 用程序框架使程序的用户界面和程序结构都只能具有标准形式 而在实际的程 序设计中 又常常需要设计一些非标准的应用程序实现一些特别的功能或操作 因此使用一些技巧来修改应用程序框架 以得到所需的应用效果 便很有使用 价值 1 3 3 由功能决定的 VisualC 十十提供功能强大的 MFC 微软基础类库 可以减少开发工量 使用 方便简单 MFC 是将复杂繁多的 Win32API 函数的进行了封装 能提供了对 Window 系列操作系统环境下大部分系统功能的支持 使用 MFC 编程比直接使用 Win32 API 函数更容易 程序的可读性更强且错误率低 同时可视化的开发环 境有利于系统的可视化 方便用户开发 Visual C 具有优秀的界面开发特性 及其所提供的 MFC 类库来创建特殊的界面效果 28 2 GIS 界面的特点 GIS 用户界面是 GIS 用户与 GIS 系统之间传递 交换信息的媒介 是用户 使用系统的综合操作环境和与系统交互的唯一通道 在 GIS 设计中 作为处理 空间信息和可视化表达的 GIS 要真正融入 IT 信息世界就必须考虑用户界面问题 所以 用户界面设计在 GIS 设计中占有非常重要的地位 地理信息系统设计教 程 2000 武大出版 而需要注意的是人机界面开发的过程 方法 工具和环境 与一般软件系统是相似的 但在细节上有较大差别 2 1 以用户为中心的人机界面 2 1 1 GIS 的用户分析 GIS 已经从学术研究逐步走进了政府 企业及大众 开始在城市规划 土 地利用 环境保护 商业选址分析 在线旅游等众多应用领域发挥愈来愈重要 的作用 用户的多样化和他们的知识背景 计算机应用水平都使 GIS 的设计具 有面向大众的多层次目标 GIS 的发展从实验技术驱动向市场应用驱动转变已 是大势所趋 从人机界面学的角度来看 必须了解各种用户的习性 技能 知 识和经验 并预测他们对人机界面的不同需求和反应 为用户界面系统的分析 设计提供科学依据 考虑到 GIS 应用的特殊性 具有地学应用特性的空间信息 处理 GIS 用户分类如图所示 专业人员 来自传统测绘 地图学 遥感等具有坚实的地理学 和测绘学基础 非专业人员 按专业程度 用户分类 按应用领域 专家用户 某个应用领域需要空间 信息支持其研究的专家 一般应用人员 具有一定专业知 识 的系统操作人员 非专业用户 包括政府决策 29 2 1 2人机交互方式 人机交互是通过计算机语言来表示用户任务 并能被计算机有效识别和执 行的人机交流手段 目前主要有五种基本方式 如表所示 命令语言菜单选择填表方式自然语言直接操纵 方式系统提示命 令 屏幕选择 命令 屏幕操作序 列 类自然语言可视对象与 动作 特点严格的句法功能直观易操作符合人类交流 习惯 以用户为中 心 缺点需记忆大量 命令 灵活性 功能方面 较欠缺 仅适用于数 据录入 尚未成熟表达的内容 有限 优点比较灵活学习和记 忆负担最 小 易操作 用 户掌握主动 权 易掌握 智能 控制水平高 简单易学 速度快 操 作灵活 适用 范围 适用于专家 型用户和高 级用户 各种应用 系统 多用于向系 统输入大量 数据 多用于专家系 统 面向非专业 用户和生疏 用户 本图表摘自地理信息系统 2001 汤国安等 30 2 1 3GIS 用户界面的设计原则 基于标准窗口系统 具有统一界面风格的图形用户界面已经成为 GIS 用户 界面发展的主流 成功的 GIS 系统应具备完善的功能和友好的图形界面 能使 用户集中精力于他们的任务本身 给他们带来愉悦而没有 障碍 的感觉 并 能对他们的每一个操作的反应作出预测 GIS 用户界面设计的基本原则是以用户为中心 具体应遵循以下原则 一致性原则 一致性原则具体包括以下两方面 追求设计者模型 系统映象和用户概念 模型的一致性 系统映象反映设计者的意图越好 设计者模型就会越接近于用 户形成的概念世界 即界面的概念表达方式应尽可能接近用户的想法 控制 应用方式的一致性 在类似的情况下 必须有一致的操作序列 并尽可能采用 国家及行业标准和用户习惯的方式 合适的功能 功能欠缺的系统会使用户丧失兴趣 而过多繁琐的功能则会 大量增加系统的复 杂性 封装性 界面要尽量掩藏复杂的内部实现细节 使用户可以集中精力解决专业应用问题 GIS 用户主观上把客观世界理解成许多数据层 即用户视图 而在计算机内部 GIS 设计者将数据抽象为不同数据类型 这一抽象是基于软件设计者的数据模 型视图的 应采用一定的封装方法将其与用户的数据视图联系起来 灵活性 界面应该灵活地安排各种对话方式 充分满足用户的各种选择 合理 高效利用屏幕 要充分考虑海量数据与有限屏幕显示的矛盾 从可读性的角度合理安排屏幕上 的多个窗口及信息载负 首先 窗口显示内容应协调一致 其次 功能菜单应 建立层次级联系 主次菜单应有区别 再次 研究空间信息可视化问题 以使 用户可以方便地操纵空间数据 另外 还要考虑屏幕色彩的合理搭配 屏幕刷 新等问题 用户界面的效率 31 显示 查询和空间分析是 GIS 的基本功能 对海量空间数据进行上述操作 其 耗费的计算机资源是巨大的 应妥善解决好这些问题 提高界面的响应速度 提供反馈 帮助信息以及出错处理机制 当系统执行长时间任务时 界面上应显示有意义的反馈信息 如显示任务进度 的进度条等 为更好地帮助用户完成任务 系统应提供提示帮助或联机帮助文 档 当用户操作失败时 系统应及时指出错误所在并提出改进意见 与应用程序设计分离 为了提高软件开发的效率 通常采用用户界面与应用程序设计相分离的思路进 行软件的开发 首先建立用户界面 构建好软件的功能框架 然后在此基础上 进行应用程序开发 添加相关的应用程序来实现界面中提供的功能 2 2 设计与开发的特殊性 GIS 界面开发不同于一般意义的二次开发 GIS 界面要求开发特殊环境下的 软件界面 同时还涉及软件工程的思想 在 GIS 用户界面的开发中 体现了人 机界面设计过程的反复性 即由人 机界面需求快速设计建立界面原型 然后由 用户进行评价 再根据他们的意见进行需求调整 建立新的原型 此过程反复 进行 直至产生用户满意的界面产品为止 目前 以 VC VB Delphi 等为代表 的可视化编程语言和大量界面快速设计工具的出现 为快速生成窗口环境界面 提供了帮助 一个通用 GIS 软件界面的设计大体可分为以下五个步骤 2 2 1 需求阶段 软件产品依然属于工业产品的范畴 依然离不开 3W 的考虑 Who where why 也就是使用者 使用环境 使用方式的需求分析 所以在 设计一个软件产品之前我们应该明确什么人用 用户的年龄 性别 爱好 收入 教育程度等 什么地方用 在办公室 家庭 厂房车间 公共场所 如何用 鼠 标键盘 遥控器 触摸屏 上面的任何一个元素改变结果都会有相应的改变 上 面 GIS 用户分析已说明 此处不在累赘 除此之外在需求阶段同类竞争产品也是我们必须了解的 同类产品比我们 提前问世 我们要比他作的更好才有存在的价值 那么单纯的从界面美学考虑 32 说哪个好哪个不好是没有一个很客观的评价标准的 我们只能说哪个更合适 更合适于我们的最终用户的就是最好的 如何判定最合适于用户呢 后面我会 介绍用户调研 2 2 2分析设计阶段 通过分析上面的需求 我们进入设计阶段 也就是方案形成阶段 我们设 计出几套不同风格的界面用于被选 首先我们应该制作一个体现用户定位的词 语坐标 例如我们为 25 岁左右的白领男性制作家居娱乐软件 对于这类用户我 们分析得到的词汇有 品质 精美 高档 高雅 男性 时尚 cool 个性 亲和 放松等 分析这些词汇的时候我们会发现有些词是绝对必须体现的 例 如 品质 精美 高档 时尚 但有些词是相互矛盾的 必须放弃一些 例如 亲和 放松与 cool 个性与等 所以我们画出一个坐标 上面是我们必须用的 品质 精美 高档 时尚 左边是贴近用户心理的词汇 亲和 放松 人性化 右边是体现用户外在形象的词汇 cool 个性 工业化 然后我们开始搜集相呼 应的图片 放在坐标的不同点上 这样根据不同作标点的风格 我们设计出数 套不同风格的界面 2 2 3调研验证阶段 几套风格必须保证在同等的设计制作水平上 不能明显看出差异 这样才能 得到用户客观的反馈 测试阶段开始前我们应该对测试的具体细节进行清楚 的分析描述 调研阶段需要从以下几个问题出发 用户对各套方案的第一印象 用户对各套方案的综合印象 用户对各套方案的单独评价 选出最喜欢的 选出其次喜欢的 对各方案的色彩 文字 图形等分别打分 结论出来以后请所有用户说出最受欢迎方案的优缺点 33 所有这些都需要用图形表达出来 直观科学 2 2 4方案改进阶段 经过用户调研 我们得到目标用户最喜欢的方案 而且了解到用户为什么喜 欢 还有什么遗憾等 这样我们就可以进行下一步修改了 这时候我们可以把 精力投入到一个方案上 这里指不能换皮肤的应用软件或游戏的界面 将方案 做到细致精美 2 2 5用户验证阶段 改正以后的方案 我们可以将他推向市场 但是设计并没有结束 我们还需 要用户反馈 好的设计师应该在产品上市以后去站柜台 零距离接触最终用户 看看用户真正使用时的感想 为以后的升级版本积累经验资料 经过上面设计过程的描述 可以清楚的发现 界面 UI 设计是一个非常科学 的推导公式 他有设计师对艺术的理解感悟 但绝对不是仅仅表现设计师个人 的绘画 所以我们一再强调这个工作过程是设计过程 UI 界面设计不存在美工 2 3 GIS 用户界面的设计内容 GIS 用户界面的设计主要包括两部分 输入设计 输出设计 2 3 1GIS 输入设计 数据输入就是将空间数据编码转换为计算机可读形式并把数据写入 GIS 数 据库的过程 数据输入通常是 GIS 建立的主要瓶颈问题 经验表明 建立数据 库的基本费用通常是 GIS 硬件和软件的 5 10 倍 对 GIS 的操作而言 要求有 一个正确而良好的数据库 输入到 GIS 数据库的数据有两类 即空间数据和与 之相联系的属性数据 空间数据描述了地理实体的空间位置 属性数据提供如 街道名称 湖泊面积和林地植被组成等描述信息 空间数据和属性数据输入 34 GIS 后应正确地联结起来 即属性必须与描述的地物位置在逻辑上匹配 还应 有严格的质量检查过程 以检验数据是否满足质量标准 输入方式设计主要是根据总体设计和数据库设计的要求来确定数据输入的具 体形式 常用的输入方式有 键盘 鼠标输入 模 数 数 模输入 网络数据传 送 光 磁盘读入等 这些输入方式各有优缺点 如表所示 其中 键盘输入 虽然是最易于掌握和实现的输入方式 也是最常用的输入方式 但也是最繁琐 的输入方式 通常在设计系统的输入时 应尽量利用已有的设备和资源 避免 大量的数据重复多次从键盘输入 在 GIS 中 数据输入具体可采用键盘 鼠标输 入 手扶跟踪数字化 扫描数字化和已有数据文件的转换等方式来进行 2 3 2GIS 输出设计 GIS 输出设计是指空间数据经 GIS 处理和分析后 所得结果以各种形式 如各种地图 图表 数据报表 文本等 输出给用户 供生产 研究 管理 决策等使用 尤其是 GIS 的地图输出 是 GIS 输出设计的重点 一个好的 GIS 应能提供一种良好的 交互式的环境供 GIS 使用者设计 制作和输出所需的地 图 下图表示了产品输出的各种形式和介质 几种输入方式比较 输入设备优点缺点适用性 键盘 鼠标 输入 键盘和鼠标 直观 简便 易于操作 工作量大 速度慢 出错率高 用于常规 少量的数据 和控制信息以及原始数 据的录入 数 模 模 数 转换输入 光电设备 快速 安全 可 靠 应用范围有 限 有时需 进行后续处 理 条码主要应用于商业企 业 工商等信息系统 扫描仪用于图像数据的 录入等 网络传送 数据 网线 快速 方便 可靠 安全 只能在网络 内部传送 适用于网络化信息系统 的数据传输 35 光 磁盘 传送数据 光介质和磁 介质 不需增加任 何设备 操作方便 受传送介质 容量的限制 适用于主 子系统间的 数据联接 GIS 产品输出 软拷贝输出硬拷贝输出 打印机输出 喷墨打印机 激光打印机 点阵打印机 绘图仪输出 喷墨绘图仪 笔式绘图仪 静电绘图仪 数据输出 光盘 磁盘 磁带 显示器输出 地图 图形 图像 表格 文本 多媒体等 GIS 产品输出模式和输出介质图 3 GIS 界面程序设计 由于由于Visual C 具有优秀的界面开发特性 这其中涉及到面向对象程 序设计 Windows消息处理机制及MFC文档视图结构等开发技术 具体为 创建 一个窗口 了解其他的M F C类 把消息发送到一个窗口和在一个窗口内绘图 36 3 1 用户界面的基本要素 窗口 窗口是屏幕上的一个矩形区域 应用程序在该区域中显示数据并等待鼠标 点击 Windows应用系统的用户界面可以包含许多窗口 每个窗口都有不同的特 点 但都是互相联系的 在这么多窗口中 基本类型只有三种 重叠 Overlaped 窗口 弹出 Popup 窗口和子窗口 Child 在它们之间并没有太多 内在的差异 但是使用不同的窗口风格 它们的外观是不同的重叠窗口通常用 于建立应用程序主窗口 事实上 有时也叫做 主 窗口或者 框架 窗口 弹出窗口通常以对话框和消息框的形式与用户对话 子窗口通常用在视图 View 中 如在文本编辑器中的文本显示 也用在控件中 如在对话框中的O K按钮 而对 那些看起来像按钮或控件的子窗口 也称为 控件 窗口 重叠窗口和弹出窗 口的主要区别是弹出窗口出现时可以没有标题 也称为标题栏 子窗口与重叠 窗口或弹出窗口的主要区别是子窗口只能出现在另一个窗口中 并且子窗口的 任何多余部分都被该窗口移去或剪切掉 另外 子窗口是唯一不能有菜单条的 窗口 见下图 尽管窗口应用程序的用户界面可以由几十个 甚至几百个窗口构成 但是大多 数窗口还是由不到十个的窗口类创建的 即使在应用程序中有一千个窗口 每 个窗口也只能是三种基本类型之一 重叠窗口 弹出窗口或子窗口 每个窗口 代表内存中的一个窗口对象 并由该窗口对象告诉 Windows 操作系统将窗口绘 37 制在何处 以及在对鼠标单击 键盘按下 假设该窗口拥有输入焦点 和时钟终 止等事件作出响应时应调用什么应用程序 窗口对象自身是窗口类的一个实例 窗口类为每个基于它创建的窗口定义了若干特征 如背景色和往何处发送消 息等 窗口的生成和销毁如下 3 1 1创建一个窗口 首先 用AfxRegister Class 函数创建一个窗口类 然后 在堆栈上或堆中创建一个CWnd类对象 调用CWnd的成员函数Create 该函数自身调用 Create Window 函数 Create Window再次创建窗口 窗口句柄保存到CWnd中 窗口管理器告知每个窗口对象在屏幕上绘制自己大体如下 CWnd wnd BOOL b wnd CreateEx ExStyle ClassName WindowName Style x y Width Height Parent Menu Param 第一行代码创建了一个C W n d类的对象 第二行通过调用Windows API函数 Create WindowEx 创建了真正的窗口 HWND hwnd Create WindowEx ExStyle ClassName WindowName Style x y Width Height Parent Menu Instance Param 因为C W n d类只是封装了用于创建窗口的Windows API函数 Create WindowEx 本质上创建窗口所必须的参数在API环境和MFC环境中是相同的 参数Style和ExStyle决定窗口的 外观 和类型 重叠 弹出 子窗口 参数Class Name决定在创建窗口时使用的窗口类 参数Window Name决定窗口标题内容 如果窗口标题有内容 参数x y Width和Height决定窗口的位置和大小 参数Parent指向拥有该窗口的窗口指针 如果有这样的窗口 参数Menu指向内存中的一个对象 作为它的菜单使用 除非创建一个子窗口 如果是这样的话 那么该参数是帮助父窗口识别子窗口的ID number 参数Instance识别该窗口属于哪个应用程序 以便发送到该窗口的消息能被 38 发送到正确的应用程序的消息队列中 CWnd类填入Instance参数 参数Param是在创建窗口时由窗口类使用的指针 该指针是指向附加信息的 非强制性结构的指针 返回的hwnd参数是指向创建的窗口对象的指针 但在未 创建任何窗口时 该参数返回值为NULL 窗口句柄自动地保存在CWnd类的m hWnd成员变量中 以上摘自 WINDOWS核心编程 一书 3 1 2销毁一个窗口 你几乎不需自己销毁一个窗口 用户或系统通常会做这项工作 如果需要在销 毁窗口的同时销毁C W n d对象 则应该在C W n d的派生类中添加下面的重载 函数 CYourWnd PostNcDestroy delete this PostNcDestroy 是销毁窗口前调用的最后一个成员函数 但是 几乎不需对 该函数进行重载 因为C W n d和派生类一般是嵌在另一个类中或建立在堆栈中 的 3 2 MFC 的类 对于MFC中的类 是从三个基类 Base Class 派生的 CObject CCmdTarget和CWnd CCmdarget派生于CObject类 而CWnd于 CCmdTarget类 从CObject派生的类 具有在运行时获得对象大小和名字的能力 从C C m d Ta rg e t派生的类 能够处理命令消息 从CWnd派生的类 能控制 它们自己的窗口 只讨论与界面有关的类 3 2 1CWND CWnd类封装了用于创建和维护窗WindowsAPI CreateWindowEx 因此 可以用MFC的CWnd类创建一个窗口 CWnd类派生于C C m d Ta rg e t类 因此 能够接收和处理命令消息 所有其他的控制窗口的MFC 类都由该类派生 可以 39 经过两个步骤来创建一个子窗口 首先 调用构造函数CWnd以创建一个CWnd对 象 然后调用Create成员函数以创建子窗口并将它连接到CWND对象 3 2 2CObject CObject类本身提供的功能较少 主要工作由六个伴生宏 companion macros 完成 CObject和这些宏一起 允许CObject的派生类在运行时获取类名和对象大小 创建一个类对象而不必知道类名 以及允许从文件设备中存取一个类的实例而 不必知道类名 下面的宏允许类的一个实例在运行时知道它的类名和对象大小 DECLARE DYNAMIC CYourClass in the h file IMPLEMENT DYNAMIC CYourClass CYourBaseClass in the cpp file 可以用CObject GetRuntimeClass 获得运行时使用这些宏的类的详情 下面这些宏包括了前面两个宏的功能 但是允许在不知道类名的情况下创建一 个类的实 DECLARE DYNCREATE CYourClass in the h file IMPLEMENT DYNCREATE CYourClass CYour Base Class in the cpp file 在不知道类名的情况下 可以用CRuntimeClass CreateObject 创建一个运 用这些宏的类的实例 3 2 3CCmdTarget 由CCmdTarget派生的类 可以接收和处理来自应用程序菜单或工具栏的命 令消息 3 2 4其它 MFC 除了框架类和视类 还提供了集中其他类来支持用户界面 通用控件类 Common Control Class 封装了诸如按钮一类的通用控件 菜单类 Menu 40 Class 是 CWnd 类为窗口提供的菜单 对话框类 Dialog Class 封装了对话 框和通用对话框 控件条类 Control Bar Class 封装了控件条 工具栏 对话 条和状态栏等 属性类 Property Class 封装了属性表和属性页 3 3 消息传输机制 MFC和窗口进行通信时有三种类型的消息 窗口 命令 Command 和控件 通知 Control Notification 并且这些消息即可发送 sent 也可以寄送 post 每个窗口使用窗口进程发送给它的消息 消息可以来自系统 你的应 用程序或别的应用程 消息告诉窗口进程执行某个任务 如初始化自己 绘制 或销毁一个窗口等 或者通知它发生某个事件 如鼠标正单击窗口 有两种 传输消息的发法 发送消息或寄送消息 发送一个消息时 直接调用窗口的窗 口进程 通信是即时的 直到窗口进程为调用函数返回一个结果后 应用程序 才能继续 寄送一个消息时 把消息发送到拥有那个窗口的应用程序队列中 一有空闲 应用程序就搜索消息队列 并在消息队列中处理消息 即从队列中 删除它们 并将它们发送到即定窗口 通信将可能延迟 直到目标应用程序获 得处理消息的时间 调用函数发送消息后即返回 但结果只是表示消息寄送成 功与否 而不是被调用窗口进程的结果 见下图 3 3 1发送消息 用MFC发送一个消息的方法是 首先 应获取接收消息的C W n d类对象的 SendMessage WndPro Postmessage 消息 n 1 消息 n 2 消息 n 3 消息泵 41 指针 然后 调用C W n d的成员函数SendMessage LRESULT Res pWnd SendMessage UINT Msg WPARAM wParam LPARAM lParam pWnd指针指向目标CWnd类对象 变量Msg是消息 wParam和lParam变量包含消 息的参数 如鼠标单击哪里或选择了什么菜单项 目标窗口返回的消息结果放 在变量Res中 发送消息到一个没有CWnd类对象的窗口 可以用下列目标窗口的 句柄直接调用Wind

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论