一个好的应用程序不仅要有强大的功能,还要有美观实用的用户界面。界面设计不仅仅是编程的问题,也需要一定的美学修养。用户界面是应用程序的一个重要组成部分,一个应用程序的界面往往决定了该程序的易用性与可操作性。
一、Visual Basic中用户界面的设计原则
Visual Basic通过在窗体上拖曳控件的方式为创建用户界面提供了非常简便的方法,窗体的设计和规划不仅影响到它本身外观的可观赏性,而且对应用程序的可操作性也有很重要的作用。一个良好的用户界面并不是只有专业的美术人员才能设计出来,在大多数时候,这样的界 面设计都是由程序设计人员完成,因此了解用户界面的设计原则,是每个程序设计人员都要做的事情。虽然在某些时候,用户界面的设计并不是一件很重要的事情,但一个优秀的程序员在设计应用程序时,总是时时从用户角度出发,以方便用户的使用为程序设计的目标,而 用户第一次接触应用程序就是从界面开始的,因此如何设计应用程序的界面在某些方面也有一些重要的意义。
大多数用户界面设计原则和任何基础美术课程中所教授的基础设计原则一样。在计算机屏幕上组合颜色、文字、框架等的基本原则和在纸张上画图一样。在开始之前作一点简单设计会加快应用程序的设计进程,有些时候,往往一个控件位置的安排就能让程序设计人员左右为 难。所以在界面设计开始之前,可以先将设计的窗体画在纸上,然后考虑哪些控件是所需要的,以及不同元素的重要性、控件之间的联系等。 协调界面、组织窗体的工作包括控件的位置、大小、一致性编排与其它相关内容。 (一)、控件的位置拖放安排
在绝大多数的程序界面设计中,并不是所有的元素都具有相同的重要性,所以应抓住重点,将较重要的元素定位在对用户来说处在一日了然的位置,重要的和需要经常访问的元素应当处于显著的位置,次要的元素则应当处于次要的位置。习惯的阅读顺序一般是从左到右,从 上到下。按照此原则,用户第一眼看到的应是计算机屏幕的左上部分,因此最重要的元素应当定位在这里,如同网页设计一样。比如有一条重要的数据信息,它的标题栏应当安排放在能被用户第一眼看到的位置,而各种操作按钮则应当处于该标题栏的下方,因为用户通常是 要使用按钮来完成窗口的操作。将控件和元素适当分组也是非常重要的,可以尝试根据“功能”和“关系”来组成一个逻辑信息组。按照控件在功能上的联系,将它们放在一起,在视觉效果上也要比将它们分散在屏幕的各处要好得多。在通常情况下,可以使用“框架”控件 来帮助合理编排各控件之间的关系。
(二)、控件的大小与一致性编排
控件的大小设置是程序设计时经常遇到的问题,虽然操作非常简单,但在决定控件大小时却很让人头疼。合理设置控件的大小以达成一致性是界面设计中的重要问题之一,一致性的外观将体现应用程序的协调性。如果缺乏一致性就会使界面混乱而无序,这样的界面将会使应 用程序看起来混乱而不严密,体现不出应有的价值,不但对用户的使用带来不便,甚至还会使用户觉得应用程序不可靠。VisualBasic提供的控件丰富多
样,每一种都能被利用,但是,应该抛弃使用较多不同控件的想法,而应当尽量使用协调性强的控件,来选择 最适合自己应用程序的特定控件子集。当有ListBox,ComboBox等多种控件被同时利用时要尽可能的使得它们采用同一风格。例如,在控件中使用相同的颜色作为背景色等,如果没有特别需要,尽量不使用鲜艳的颜色。 在应用程序中保持不同控件的一致性对提高应用程序的可用度来讲也是非常重要的。如果两种控件选择了不同的颜色和显示效果,那么应用程序将会显得十分不协调。所以在确定设计思路时,一定要坚持用同一种风格贯穿整个应用程序的想法,用这个思路来完成整个程序的 设计。
(三)、合理利用空间,保持界面的简洁
在界面的空间使用上,应当形成一种简洁明了的布局。在用户界面中使用空白空间有助于突出元素和改善可用性。即合理使用窗体控件之间以及控件四周的空白区域。一个窗体上有太多的控件会导致界面杂乱无章,给寻找字段或者控件带来不便或者困难。因此,在设计中需 要插入空白空间来突出设计元素。各控件之间一致的间隔以及垂直与水平方向各元素的对齐也可以使设计更为明了,行列整齐、行距一致、整齐的界面安排也会使其容易阅读。在此,可以合理利用VisualBasic提供了几个工具,以便让控件的间距、排列和尺寸的 调整变得非常容易。水平间距、垂直间距、在窗体中央、排列、按相同大小制作等菜单项都可以在“格式”菜单中找到。
另外,界面设计最重要的原则就是简洁与明了。对于应用程序而言,如果界面看上去很难,则可能程序使用本身也比较复杂,而在设计时稍稍深入考虑一下,便有助于创建看上去和用起来都很简单的界面。从美学的角度来讲,整洁、简单明了的设计更有可取性。在界面设计 中,一个普遍易犯的错误就是力图用界面来模仿现实世界的对象,但这样的设计,除了对自己的设计增加难度,而对用户并没有真正的好处。最好的设计就是根据对现实对象的理解来设计出自己的、并能为用户带来方便的界面,并不一定要模仿显示对象,而可以使用有标签 的界面或几个链接的窗体来显示所有的信息,也可以使用附加的控件,比如带有选取预装入的列表框,这些控件可以减少输入工作量,还可以取出不常用的函数并把它们移到自己的窗体中去来简化许多应用程序。提供缺省有时也可以简化应用程序,如果十个用户中有九个选 取加粗的文本,就把文本粗体设为缺省值,而不需要用户每次都选取一遍,但要注意不要忘记提供一个选项可以覆盖该缺省值。此外,向导也有助于简化复杂的或不常用的任务。简化与否最好的检验就是在应用中观察应用程序。
(四)、合理利用颜色、图像和显示效果来达成内容与形式的统一
在界面上使用颜色可以增加视觉上的感染力,现在的许多显示器能够显示上百万种的不同颜色,这很容易使人想要全部使用它们。如果在开始设计时没有仔细地考虑,颜色也会像其它基本设计原则一样出现许多问题。每个人对颜色的喜爱有很大的不同,用户的品味也会各不 相同。颜色能够引发强烈的情感,如果是设计针对普遍用户的程序,那一般说来,最好保守传统,采用一些柔和的、更中性化的颜色。当然,对特定的用户就要依据用户自己的选择了。少用明亮色彩可以有效地突出或者吸引人们对重要区域的注意。依据许多程序设计人员的 经验,应当尽量限制应用程序所用颜色的种类,而且色调也应该保持一致。如果可能的话,最好坚持标准的16色的调色板, 另外,图片与图标的使用也可以增加应用程序视觉上的影响,所以细心的设计也是必
不可少的。在某些时候不用文本而利用图像就可以更形象地传达信息,但常常不同的人对图像的理解也不一样。带有表示各种功能图标的工具栏,是一种很有用的界面组成,但如果不能很容 易地识别图标所表示的功能,反而会事与愿违。在设计工具栏图标时,应查看一下其它的应用程序,以了解已经创建了的普遍的大众可认可的标准。例如,用Windows的图标来表示相似的功能。总之,在设计自己的图标与图像时,应尽量使它们简单。
用户界面也广泛使用各种显示效果,合理的选择显示效果,也能表达特定的设计意图,选择静态或动态显示,可带给用户不同的信息。动感的显示是对象功能的可见线索,虽然用户可能对某个术语还不熟悉,但动态的实例可体会设计者的意图。按下按钮、旋转旋钮和点亮电 灯的开关等都能进行动感表示,一看到它们就可以看出其用处。例如,用在命令按钮上的三维立体效果使得它们看上去像是被按下去的。如果设计平面的命令按钮,就会失去这种动感,因而不能清楚地告诉用户这是一个命令按钮。但在某些情况下,可能平面的按钮是适合的 ,但不管怎样,只要在整个应用程序中合理的利用各种显示效果并能保持一致,这都能更好的促进内容与形式相统一。
二、如何创建友好的用户界面毫无疑问,应用程序的界面对用户非常重要——无论代码多么卓越,如果用户发现应用程序很难使用,那么难于很好地接受它。因此,在开发应用程序的过程中,开发人员必须重视用户界面的友好性。本文以VisualBasic为例,向读 者介绍创建友好的用户界面。 界面设计基础 1、什么是好的界面
设计用户界面时,最好是先看看Microsoft或其他公司比较优秀的应用程序,我们会发现许多通用的东西,比如工具栏、状态条、工具提示、上下文菜单以及标记对话框等。也可以凭借自己使用软件的经验,想一想曾经使用过的一些应用程序,哪些很好用。
另外,还要注意到大多数成功的应用程序都提供多种选择,来适应不同用户的偏爱。例如MicrosoftWindows的“资源管理器”允许用户通过菜单,用键盘或者鼠标拖放来复制文件。提供同一功能的多种操作方式,会扩大应用程序的吸引力。至少应该使 所有的功能都能被鼠标和键盘所访问。
2、Windows界面准则Windows操作系统的主要优点就是为所有的应用程序提供了公用的界面。知道如何使用基于Windows应用程序的用户,很容易学会使用其他应用程序。而与创建的界面准则相差太远的应用程序不易让人喜欢。
菜单就是这方面很好的一个例子——大多数基于Windows的应用程序都遵循这样的标准、“文件” 菜单在最左边,然后是“编辑”、“工具”等可选的菜单,最右边是“帮助”菜单。子菜单的位置也很重要。用户本期望在“编辑”菜单下找到“复制”、“剪切”与“粘贴”等子菜单,若将它们移到“文件”菜单下会引起用户的混乱。不要偏离已经创建的准则太远,除非 有很好的理由这样做。3、控件的位置通常,在用户界面中,应该将重要的或者频繁访问的元素放在显著的位置上,而不太重要的元素就应当降级到不太显著的位置上,以确保越是重要的元素越要很快地显现给用户。 对于大多数自然语言来说,我们都习惯于在一页之中从左到右、自上到下地阅读。
对于计算机屏幕也如此,大多数用户的眼睛会首先注视屏幕的左上部位,所以最重要的元素应放在屏幕的左上部位。例如,如果窗体上的信息与用户有关,则它的名字字段应当显示在它能 最先被看到的地方。而命令按钮,如“确定”或“下一个”,应当放置在屏幕的右下部位(因为用户在未完成对窗体的操作之前,通常不会访问这些按钮)。
应当尽量把元素按功能或关系进行逻辑地分组,比如定位数据库的按钮(如“下一条”、“最后一条”)应当被形象地分成一组,而不是分散在窗体的四处。再如,通常将各字段与地址分在一组,因为它们联系紧密。在许多情况下,可以使用框架控件来进行分组。4、界面 元素的一致性在用户界面设计中,一致性是一种优点。一致的外观与感觉可以在应用程序中创造一种和谐。如果界面缺乏一致性,则很可能引起混淆,并使应用程序看起来没有条理,甚至可能引起对应用程序可靠性的怀疑。
在VisualBasic中虽然有大量的控件可供使用,但应尽可能地选择能很好适合特定应用程序的控件子集。例如,虽然列表框、组合框、网络以及树等控件都可用来表示信息列表,最好还是尽可能使用一种类型。
还有,尽量恰当地使用控件,虽然TextBox控件可以设置成只读,并用来显示文本,但Label控件通常更适用于该目的。在为控件设置属性时要保持一致性,如果在一个地方可编辑的文本使用白色背景,除非有很好的理由,否则不要在别的地方又使用灰色。
在应用程序中不同的窗体之间保持一致性对其可用性有非常重要的作用。如果在一个窗体上使用了灰色背景以及三维效果,而在另一个窗体上使用白色背景及二维效果,则这两个窗体就显得毫不相干。5、空白空间有的用户界面中使用空白空间有助于突出元素和改善可 用性。一个窗体上有太多的控件会导致界面杂乱无章,使得寻找一个字段或者控件非常困难,在设计中需要插入空白空间来突出设计元素。 各控件之间一致的间隔以及垂直与水平方向元素的对齐可以使设计更可用。就像杂志中的文本那样,安排得行列整齐、行距一致,整齐的界面也会使其容易阅读。 VisualBasic提供了几个工具,使得控件的间距、排列和尺寸的调整非常容易。“排列”、“按相同大小制作”、“水平间距”、“垂直间距”和“在窗体中央”等命令都可以在“格式”菜单中找到。
6、颜色在界面上使用颜色可以增加视觉上的感染力,少量明亮色彩也可以有效地引起人们对重要区域的注意。但是,应当尽量限制应用程序所用颜色的种类,而且色调也应该保持一致。如果可能的话,最好坚持标准的16色调色板。 7、图像和图标
图片与图标的使用也可以增加应用程序在视觉上的趣味,但是,细心的设计也是必不可少的,如果用户不能很容易地识别图标所表示的功能,就会很糟糕。在设计工具栏图标时,应查一下其他的应用程序以了解已经创建了什么样的标准。例如,许多应用程序用一张角上有卷 边的纸来表示“新建文件”图标。也许还有更好的比喻来表示这一功能。但改用其他的表示方法会引起用户的混淆。 8、字体
字体也是用户界面的重要部分,因为它们常常给用户传递重要的信息。需要选取在不同的分辨率和不同类型的显示器上都能容易阅读的字体。应当尽量使用标准Windows
字体,如Arial、NewTimesRoman或者System。如果使用了非标准的字体 ,那么当用户的系统中没有包含指定的字体时,系统会使用替代的字体,其结果可能与设想的完全不一样。
还有,在选取字体时,设计的一致性非常重要。大多数情况下,不应当在应用程序中使用两种以上的字体。9、错误处理用户在使用程序的时候总会出现这样那样的问题。程序设计人员在设计用户界面时,应尽量全面地考虑可能出现的错误,并判断哪一个需要用户交互作用 ,哪一个可以按事先安排的方案解决。
1、创建容易理解的对话框 偶尔应用程序中会出现错误,需要为解决这种情况做出判断。这通常作为代码的分支出现If...Then语句或者Case语句。如果这个判断要与用户交互,此问题通常用对话框来提交给用户。
相信任何程序员都会使用对话框与用户交互,关键问题是要采取用户容易理解的语言。比如这样的消息、“硬盘C的扇区被损坏或不能访问。中止、重试、忽略?”,这对一般的用户而言不大好理解。更好的表达可以是“在C盘上存文件有问题,请把文件存于A盘。存 不存文件?”
当为应用程序创建对话框时,应想着用户。这个消息给用户传达了有用的信息吗?它容易理解吗?命令按钮表示的选择明确吗?这个选择适合给定的条件吗? 2、不用对放大框的错误处理
当错误出现时不一定要打断用户。有时更可取的是不通知用户而用代码来处理错误,或者以不停止用户工作流程的方法来提醒用户。很好的例子是MicrosoftWord中的“自动更正”功能、如果普通单词拼错了,Word自动修改它;如果不常用单词拼错了 ,在其下划一条红线提醒用户以后改正。
10、有大量的技巧可以采用
(1)、在“编辑”菜单中添加“撤消”功能。对于删除等情况,与其用“确定”对话框来打断用户,还不如确保他们做出正确的决定,并提供“撤消”功能以备他们以后改变主意。 (2)、在状态栏或图标上显示消息。如果错误不影响用户当前的任务,不要停止应用程序。使用状态栏或亮色警告图标来警告用户——当他们准备好后可以处理该问题。
(3)、直接改正问题。有时错误的解决办法很显然,例如,当用户试图存文件时磁盘已满,则在其他驱动器中检查寻找空间。如果空间可用,则保存该文件;在状态栏中显示一条消息告诉用户做了些什么。 11.设计完善的帮助体系
不论用户界面设计得多么好,有时用户总需要帮助。应根据操作的难易程度和用户的类别,为程序设计层次不同但相对完善的帮助体系,可以采用的方法包括建立联机帮助、工具提示、状态条、“这是什么”帮助等。 1.联机帮助
联机帮助是任何应用程序的重要部分,它通常是用户有问题时最先查看的地方。甚至简单的应用程序也应该提供“帮助”。
在设计“联机帮助”时,要记住它的主要目的是回答问题。创建主题名称与索引条目时尽量用用户的术语,例如,“我如何格式化页面?”比“编辑”、“页格式”
菜单更容易找到主题。
很多情况下,还要提供上下文相关的帮助,如果用户按下F1键后,屏幕上立刻出现了相关的帮助画面,用户会感到非常满意。 2.工具提示
工具提示是个小标签,当鼠标指针在控件上停留时即显示相关帮助信息。当用户在用户界面上搜索时,工具提示是一种向他们显示信息的好方法。
大多数VisualBasic控件都包含用来显示工具提示的属性ToolTipText,可以用这个属性为控件提供工具提示,如、CmdPrint.ToolTipText=“打印文档” 3.状态显示
状态显示是提供那些不太适合工具提示的指令或消息的一种好方法,包括在VisualBasic的专业版与企业版中的状态条控件能很好地显示消息,Label控件也能用作状态显示。
在状态显示中显示的文本可以用以下两种方法之一来更新、用控件或窗体的GotFocus事件,或者用MouseMove事件。 4.“这是什么”帮助
“这是什么”帮助是指当用户选取窗体右上角的小问号并单击控件,或者直接在控件上按下鼠标右键时,出现的帮助信息。“这是什么”帮助提供了和弹出式“帮助”主题的链接,稍复杂的应用程序就应该提供这种帮助形式。
三、有关界面设计与测试的规范
我在工作中总结了一些有关界面设计与测试的规范,与大家共享。 界面设计与测试规则 界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设坪侠淼慕缑婺芨没Т辞崴捎湓玫母惺芎统晒Φ母芯酰喾从 捎诮缑嫔杓频氖О埽糜没в写彀芨校偈涤们看蟮墓δ芏伎赡茉谟没У奈肪逵敕牌懈吨疃鳌D壳敖缑娴纳杓埔鹑砑杓迫嗽钡闹厥拥某潭然乖对恫还唬钡阶罱持谱鞯男似穑攀艿阶业那囗6疑杓屏己玫慕缑嬗捎谛枰哂幸帐趺赖奶旄扯饩芫?
目前流行的界面风格有三种方式、多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。
1、易用性:按钮名称应该易懂,用词准确,屏弃没楞两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。 易用性细则:
1)、完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。 2)、完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。 3)、按功能将界面划分局域块,用Frame框括起来,并要有功能说明或标题。 4)、界面要支持键盘自动浏览按钮功能,即按Tab键的自动切换功能。
5)、界面上首先应输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。
6)、同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。
7)、分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab
8)、默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。 9)、可写控件检测到非法输入后应给出说明并能自动获得焦点。
10)、Tab键的顺序与控件排列顺序要一直,目前流行总体从上到下,同时行间从左到右的方式。
11)、复选框和选项框按选择几率的高底而先后排列。 12)、复选框和选项框要有默认选项,并支持Tab选择。 13)、选项数相同时多用选项框而不用下拉列表框。 14)、界面空间较小时使用下拉框而不用选项框。 15)、选项数叫少时使用选项框,相反使用下拉列表框。
16)、专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词眼。 2、 规范性:通常界面设计都按Windows界面的规范来设计,即包含“菜单条、工具栏、工具厢、状态栏、滚动条、右键快捷菜单”的标准格式,可以说、界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具厢。 规范性细则:
1)、常用菜单要有命令快捷方式。
2)、完成相同或相近功能的菜单用横线隔开放在同一位置。 3)、菜单前的图标能直观的代表要完成的操作。 4)、菜单深度一般要求最多控制在三层以内。 5)、工具栏要求可以根据用户的要求自己选择定制。 6)、相同或相近功能的工具栏放在一起。 7)、工具栏中的每一个按钮要有及时提示信息。 8)、一条工具栏的长度最长不能超出屏幕宽度。 9)、 工具栏的图标能直观的代表要完成的操作。 10)、系统常用的工具栏设置默认放置位置。 11)、工具栏太多时可以考虑使用工具厢。
12)、工具厢要具有可增减性,由用户自己根据需求定制。 13)、工具厢的默认总宽度不要超过屏幕宽度的1/5。 14)、 状态条要能显示用户切实需要的信息,常用的有、
目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。
15)、滚动条的长度要根据显示信息的长度或宽度能及时变换,以利于用户了解显示信息的位置和百分比。
16)、状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
17)、菜单和工具条要有清楚的界限;菜单要求凸出显示,这样在移走工具条时仍有立体感。
18)、菜单和状态条中通常使用5号字体。工具条一般比菜单要宽,但不要宽的太多,否则看起来很不协调。
19)、右键快捷菜单采用与菜单相同的准则。
3、帮助设施:系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。 帮助设施细则。
1)、帮助文档中的性能介绍与说明要与系统性能配套一致。(我们的系统帮助文档都是系统的祖先时期的说明,让人困惑)。
2)、打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。 3)、操作时要提供及时调用系统帮助的功能。常用F1。
4)、在界面上调用帮助时应该能够及时定位到与该操作相对的帮助位置。也就是说帮助要有即时针对性。
5)、最好提供目前流行的联机帮助格式或HTML帮助格式。
6)、用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。 7)、如果没有提供书面的帮助文档的话,最好有打印帮助的功能。
8 )、在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求新的帮助方式。
4、合理性:屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。 合理性细则。
1)、父窗体或主窗体的中心位置应该在对角线焦点附近。 2)、子窗体位置应该在主窗体的左上角或正中。
3)、多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。 4)、重要的命令按钮与使用较频繁的按钮要放在界面上注目的位置。
5)、错误使用容易引起界面退出或关闭的按钮不应该放在易点位置。横排开头或最后与竖排最后为易点位置。
6)、与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)。
7)、对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。 8)、非法的输入或操作应有足够的提示说明。
9)、 对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。
10)、提示、警告、或错误说明应该清楚、明了、恰当。
5、美观与协调性: 界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。美观与协调性细则。
1)、 长宽接近黄金点比例,切忌长宽比例失调、或宽度超过长度。 2)、 布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。 3)、 按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置。 4)、 按钮的大小要与界面的大小和空间要协调。 5)、 避免空旷的界面上放置很大的按钮。 6)、放置完控件后界面不应有很大的空缺位置。
7)、 字体的大小要与界面的大小比例协调, 通常使用的字体中宋体9-12较为美观,很少使用超过12号的字体。
8)、 前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。常用色考虑使用Windows界面色调。
9)、 如果使用其他颜色,主色要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。 10)、 大型系统常用的主色有\"#E1E1E1\"、\"#EFEFEF\"、\"#C0C0C0\"等。
11)、 界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。
12)、 如果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。
13)、对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。 14)、 通常父窗体支持缩放时,子窗体没有必要缩放。
15)、如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。 6、菜单位置:菜单是界面上最重要的元素,菜单位置按照按功能来组织。 菜单设测试细则:
1)、菜单通常采用“常用--主要--次要--工具--帮助”的位置排列,符合流行的Windows风格。
2)、常用的有“文件”、“编辑”,“查看”等,几乎每个系统都有这些选项,当然要根据不同的系统有所取舍。
3)、下拉菜单要根据菜单选项的含义进行分组,并切按照一定的规则进行排列,用横线隔开。
4)、 一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。 5)、 没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。
6)、 如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。 7)、 菜单深度一般要求最多控制在三层以内。 8)、 对常用的菜单要有快捷命令方式,组合原则见8。
9)、对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
10)、菜单前的图标不宜太大,与字高保持一直最好。
11)、主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。 12)、主菜单数目不应太多,最好为单排布置。
7、独特性:如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的迁移默化的广告效用。
1)、安装界面上应有单位介绍或产品介绍,并有自己的图标。 2)、主界面,最好是大多数界面上要有公司图标。 3)、登录界面上要有本产品的标志,同时包含公司图标。 4)、帮助菜单的“关于”中应有版权和产品信息。
5)、公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮用语等应该大体一致。 8、快捷方式的组合
在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些 在西文Windows及其应用软件中快捷键的使用大多是一致的。 菜单中、
1)、面向事务的组合有:
Ctrl-D 删除 ;Ctrl-F 寻找 ;Ctrl –H替换;Ctrl-I 插入 ;Ctrl-N 新记录 ;Ctrl-S 保存 Ctrl- O 打开。 2)、列表:
Ctrl-R ,Ctrl-G定位;Ctrl-Tab下一分页窗口或反序浏览同一页面控件;。 3)、编辑、
Ctrl-A全选;Ctrl-C 拷贝;Ctrl-V 粘贴;Ctrl-X 剪切;Ctrl-Z撤消操作;Ctrl-Y恢复操作。 4)文件操作:
Ctrl-P 打印;Ctrl-W 关闭。 5)、系统菜单:
Alt-A文件;Alt-E编辑;Alt-T工具;Alt-W窗口;Alt-H帮助。 6)、MS Windows保留键:
Ctrl-Esc 任务列表 ;Ctrl-F4 关闭窗口; Alt-F4 结束应用;Alt-Tab 下一应用 ;Enter 缺省按钮/确认操作 ;Esc 取消按钮/取消操作 ;Shift-F1 上下文相关帮助 。 按钮中:
可以根据系统需要而调节,以下只是常用的组合。
Alt-Y确定(是);Alt-C取消;Alt-N 否;Alt-D删除;Alt-Q退出;Alt-A添加;Alt-E编辑;Alt-B浏览;Alt-R读;Alt-W写。
这些快捷键也可以作为开发中文应用软件的标准,但亦可使用汉语拼音的开头字母。 9、安全性考虑:
在界面上通过下列方式来控制出错几率,会大大减少系统因用户人为的错误引起的破坏。开发者应当尽量周全地考虑到各种可能发生的问题,使出错的可能降至最小。如应用出现保护性错误而退出系统,这种错误最容易使用户对软件失去信心。因为这意味着用户要中断思路 ,并费时费力地重新登录,而且已进行的操作也会因没有存盘而全部丢失。 安全性细则:
1)、最重要的是排除可能会使应用非正常中止的错误。 2)、应当注意尽可能避免用户无意录入无效的数据。 3)、采用相关控件限制用户输入值的种类。
4)、当用户作出选择的可能性只有两个时,可以采用单选框。
5)、当选择的可能再多一些时,可以采用复选框,每一种选择都是有效的,用户不可能输入任何一种无效的选择。
6)、当选项特别多时,可以采用列表框,下拉式列表框。
7)、在一个应用系统中,开发者应当避免用户作出未经授权或没有意义的操作。 8)、对可能引起致命错误或系统出错的输入字符或动作要加限制或屏蔽。 9)、对可能发生严重后果的操作要有补救措施。通过补救措施用户可以回到原来的正
确状态。
10)、对一些特殊符号的输入、与系统使用的符号相冲突的字符等进行判断并阻止用户输入该字符。
11)、对错误操作最好支持可逆性处理,如取消系列操作。
12)、在输入有效性字符之前应该阻止用户进行只有输入之后才可进行的操作。 13)、对可能造成等待时间较长的操作应该提供取消功能。
14)、特殊字符常有;;’”><,`‘、“[”{、\\|}]+=)-(_*&&^%$#@!~,.。?/还有空格。
15)、与系统采用的保留字符冲突的要加以限制。
16)、在读入用户所输入的信息时,根据需要选择是否去掉前后空格。
17)、有些读入数据库的字段不支持中间有空格,但用户切实需要输入中间空格,这时要在程序中加以处理。 10、多窗口的应用与系统资源、
设计良好的软件不仅要有完备的功能,而且要尽可能的占用最底限度的资源。 1)、 在多窗口系统中,有些界面要求必须保持在最顶层,避免用户在打开多个窗口时,不停的切换甚至最小化其他窗口来显示该窗口。
2)、在主界面载入完毕后自动卸出内存,让出所占用的WINDOWS系统资源。 3)、关闭所有窗体,系统退出后要释放所占的所有系统资源 ,除非是需要后台运行的系统。
4)、尽量防止对系统的独占使用。
四、图形用户界面设计什么是优秀的图形用户界面?说到底一句话、一个优秀的用户界面即是一个直观的、对用户透明的界面、用户在首次接触了这个软件后就觉得一目了然,不需要多少培训就可以方便地上手使用。说起来很简单,可是在实际开发中,真正能够做到这一点 却很不容易。对于Windows的开发人员,微软公司出版的《窗口界面、应用设计指南》(《The Windows Interface、 An Application Design Guide (1992)》)是在微机平台上界面设计的公认标准。尽管随着技术的不断进步,会不断地有新的窗口控件出现,而导致其中很多标准增加或修改。但是一般来讲,每一个程序员都会认识到,在他们的编程过程中应当遵循某些最基本的标准,尽管他们对这些标准中某些部 分还很不熟悉,或者没有被用到。本文将论述这样一些已被广大程序员和用户普便接受的用户界面设计的原则和规范。1.用户需求对于长期从事mainframe结构、在字符界面下进行开发的程序员来讲,进入Windows的客户/服务器环境的最大障碍是,应当认识到在所编写的软件中用户是所有软件处理的中心,而不应由应用程序来决定处理过程,这种思想与PowerBuilder中事件驱动的编程方式是相对应的。一个好的图形用户界面(以下简称GUI)应当是由用户来控制应用如何工 作,如何响应,而不是由程序员按自己的意愿把操作流程强加给用户。当编写事件驱动程序时,应为每一个动作或事件指定一个且唯一的响应程序。触发这些事件、使这些响应程序执行的源动力不是应用,而是用户。例如笔者使用MODEM拨号上网时,当线路接通后,屏 幕将依次出现下列信息,提示用户按指定顺序输入登录信息、Annex Command Line Interpreter
*Copyright(C) 1988,1995 Xylogics,Inc.
Checking authorization, Please wait... Annex username、 sjhzyz Annex password、 Permission granted annex、 ppp Switching to PPP.
这就是一个典型的基于字符界面的应用软件,登录的全部过程都是由程序来决定的,提示用户输入内容。而与此相对比的是,ISP所提供的Internet In A Box软件在电子邮件管理一项中提供了另一个用户登录窗口、这就是一个基于GUI的应用,在这个窗口中,用户成为软件处理的主人,用户可以根据自己的意愿决定这些信息的输入顺序,也可以任意修改以输入的内容,直到点击OK按钮后,才真正触发软件登录远端的 服务器,或者是点击Cancel取消登录操作。当然在某些应用中可能会有某一部分的处理流程是固定的,用户必须按照指定的顺序输入操作信息。为了使用户在操作中得到引导,微软已经在它的软件中加入了向导(Wizard)的概念,本文将在后面的内容中讨论如 何实现这一概念。在系统中对用户的操作及时地提供反馈信息是十分重要的,这些反馈信息也许只是像警告铃或将鼠标显示成沙漏等一样不起眼的反应,但是却能使用户树立信心,使他感到他仍在控制软件,而没有死机。2.提供反馈的几种技术手段微帮助。它是MDI( 多文档界面)框下面的状态条中的文字。窗口底部的微帮助一般有两个作用、一是在用户选择菜单项或其他窗口控件时,显示更多的文字信息来解释或提示用户所要进行的操作是什么,另一个用途是系统在处理进程中显示正在进行的工作状态,以使用户了解系统的处理进度 ,从而免去死机的担心。 2工具条的帮助。当鼠标停留在某一个工具栏上时,会出现一个弹出式信息框,在PowerBuilder 4.0以上的版本中,缺省显示的是工具栏文字。也可以用菜单画笔在工具栏文字之后加一个逗号,加入一段更长的文字来定义一个不同的工具栏说明。例如、键入撏顺觯脭,我们将看到在带文字的工具栏图标上显示的文字是撏顺鰯,而弹出的信息框显示的是摴乇沼τ脭。 2声音提示。在用户可能进行破坏性操作时,用声音及时提出警告是必要的,但是我们不能滥用,因为当用户无法正确操作软件或做了不希望做的事情时,听到警告声反而会更加烦恼,因此使用这种反馈方法时要慎用。此外在一个长处理的结束时使用声音反馈(如警告声或 小段悦音)也是必要的。2使用反馈的场合。在客户/服务器环境下用户最不能忍受的是系统反应速度慢,而在实际的应用中我们会经常遇到计算机需要比较长的时间执行一个或一批操作。在这种情况下,我们应加入反馈,让用户了解应用正在做什么。比如、在需等待时间较短(0-10秒)的情况下应将鼠标显示成为沙漏,可调用函数SetPointer( HourGlass! ) 来实现这一功能; 在处理需10到18秒时,由微帮助来显示处理进度; 当需18秒以上时,要显示这个处理窗口,或显示进度条; 当一个长时间的处理完成时应发出一个提示警告声如beep(1),这样用户不必总看着屏幕。23.规范性和一致性我们经常使用的图形用户界面,如Windows、Mac、Xwindow等,都提供了一套标准的控件,经常使用计算机的用户可能已十分了解这些 标准控件的用途,例如一个多选框在用户用鼠标点击后会改变其状态,当按动滚动条上的箭头时,屏幕将发生滚动;当点击单选框时一般系统不会弹出一个对话框,如果不做诸如点击按钮或选择菜单等类似的操作,系统也不会进入到一个什么新的操作进
程等等。在用户用过 了大量应用软件后,用户就会对常见窗口的操作建立起一些基本概念,当他进入一个从未用过的软件时,不会束手无策,而是会因该新软件与已用过的某些应用相似,从而对它的使用有一定认识。这种认识程度越高,说明这一软件越直观,也就是软件的用户界面设计得越成 功。
因此每一个程序员都应当意识到他自己所开发的应用与其他程序员开发的应用都是在同一平台上,使用的也是相同的窗口控件,用户在其他应用上学到的对软件的操作方法越多,可运用在新开发的应用上的也就越多。如果使用标准的方法,用户会感到越方便,尽管他们并不 一定能意识到方便的原因所在。作为一个程序员首先应当了解窗口中不同控件的作用,不少PowerBuilder的程序员都在DOS或Mainframe的字符终端上开发过应用软件,而对Windows的图形界面却比较陌生。因此作为程序员熟悉使用怎样的控 件来完成怎样的功能是至关重要的。当一个程序员用错了所应使用的控件时,应用也不可能是很直观的。
保持一致是使应用直观的重要环关。一致性既包括使用标准的控件,也是指使用相同的信息表现方法,如在字体、标签风格、颜色、术语、显示错误信息等方面确保一致。下面是显示信息时应当遵循的一致性标准、
* 标签提示、字体为加重、宋体、黑色、灰底或透明、无边框。右对齐并带有冒号结束。如撔彰簲;
* 日期、正常字体、宋体、白底黑字,3-D lowered; * 对齐方法、
a. 左对齐、一般文字、单个数字、日期等。 b. 右对齐、数字、时间、日期加时间。
对于这些信息的排列大部分都是由程序员来控制的,上述显示风格也仅供参考,更为重要的是程序员应当注意在同一软件中表现形式的一致性。如果在同一个应用中,这些信息的表现方式不一致,会使得用户分散注意力,因而影响这一软件的使用。 遵循了上述一致性原则后,还应注意在一个窗口内部所有控件的布局和信息组织的艺术性,使得用户界面美观。在一个窗口中按tab键,移动聚焦的顺序不能杂乱无章,在字符界面下,如DOS中,tab order的顺序是先从左至右,后从上至下,而在Windows中的顺序则一般应先从上至下再从左至右。一 屏中首先应输入的和重要信息的控件在tab顺序中应当靠前,位置也应放在窗口上部较醒目的位置。
MS Windows应用中应当遵循的规则还有一条是可不用鼠标的原则、应用中的每一个功能只用键盘也应当可以完成,也就是说在设计的应用中还应加入一些必要的按钮和菜单项。但是,许多鼠标的操作,如双击、拖动对象等,并不能简单地用键盘来模拟即可实现,例如在 一个列表框中用鼠标双击其中一项可以表示选中该项内容;为了用键盘也能实现这一功能,必须在窗口中定义一个表示选中的按钮,以作为实现双击功能的替代。又如在一个窗口中有两个数据窗口,可以用鼠标从一个数据窗口中将一项拖出然后放到另一个中;如果只用键盘 ,就应当在菜单中设置拷贝或移动的菜单项。 在菜单项中使用快捷键可以让使用键盘的用户操作更快一些,在西文Windows及其应用软件中快捷键的使用大多是一致的。 面向事务的: * Ctrl-D删除
* Ctrl-F寻找 * Ctrl-I插入 * Ctrl-N新记录 * Ctrl-S保存 查询/列表: * Ctrl-O * Ctrl-R
其它:* Ctrl-C拷贝 * Ctrl-H帮助 * Ctrl-P打印 * Ctrl-V粘贴 * Ctrl-W关闭 * Ctrl-X剪切
MSWindows保留键:* Ctrl-Tab下一窗口 * Ctrl-Esc任务列表 * Ctrl-F4关闭窗口 * Alt-F4结束应用 * Alt-Tab下一应用 * Enter缺省按钮/确认操作 * Esc取消按钮/取消操作 * Shift-F1上下文相关帮助
这些快捷键也可以作为开发中文应用软件的标准,但使用汉语拼音的开头字母亦可。 4.安全的应用软件在应用软件的开发中,重要的一个因素是要给用户提供一个安全的工作环境,在软件中不应藏有任何地雷,在用户将要作破坏性的且难以恢复的操作时,系统应当给以应有的提示。用户只有充分相信软件是安全的,才会乐于使用它,才会放心地去探索这 一软件所提供的新功能,才能更高效地使用它。
什么是安全的应用
首先最重要的,但也是最不容易实现的是排除可能会使应用非正常中止的错误。在任何情况下,最终用户都不应看到应用出现保护性错误而退出系统,这种错误最容易使用户对软件失去信心。因为这意味着用户要中断思路,并费时费力地重新登录,而且已进行的操作也 会因没有存盘而全部丢失。当然造成系统中止的原因很多,可能是网络、硬件、系统软件或是PowerBuilder本身的问题,但是开发者应当尽量周全地考虑到各种可能发生的问题,使出错的可能降至最小。特别是使用PowerBuilder开发的软件的确经 常会出现保护性错误,但是开发人员却不能因此怨天尤人,而是要多做测试,选择最为保险的方法实现相同的功能。
此外,在使用PowerBuilder编程时,还有一种常见的导致非正常中止的情况是由于程序员自己的原因造成的,这就是变量联接滞后问题,即在编译时定义一个有效的对象类,但是在运行时却没有创建它的实例或这个实例已释放(destroy);这时如 有一段代码引用到这一对象,系统却无法在内存中找到它的实例,而导致中止。因此,
在引用变量时,应当首先检查它是否存在实例,例如在一个窗口中引用了另外一个窗口的对象,就应首先检测它在执行代码之前是否已经创建了一个实例。
在下面的例子中,win_A这一窗口对象可能在代码执行时并没有创建,因此我们就应当在执行前用
IsValid函数来检查其是否有效、 IF IsValid(win_A) THEN Close(win_A) ENDIF
使用数据窗口中应注意的问题
PowerBuilder的代码将引用很多数据窗口中的列,指代这一列的方法可以是列名也可以是列号。 列号是指这一个数据窗口在执行Select语句中排列的顺序号,如果习惯于使用列号引用某列,要注意 可能在后来会在数据窗口的select语句中移动或删除某些列,如果不能想起所有引用过这个数据窗口 的代码,这时就有可能出现数据类型不匹配的错误。使用列名来引用则可以避免这类错误,但是这里使用的字符串,在编译时PowerBuilder并不验证引用得是否正确,只有在运行时,系统才可能发现使用的字符串在数据窗口中不存在,并提示错误,退出应用。 这种错误一般比较难以发现,减小这种出错的方法是尽可能使用Object Browses来剪贴,以减小录入错误。 安全的环境还应当注意尽可能避免用户无意录入无效的数据。在GUI下,有许多控件可以以十分友好的方式限制用户输入值的种类。例如一个多选框只有两种值的选择,所以当用户作出选择的可能性只有两个时,可以采用这一控件,免去了另外编程进行输入有效性验证的 麻烦。当选择的可能再多一些时,可以采用单选钮,每一种选择都是有效的,用户不可能输入任何一种无效的选择。同理采用ListBox、DropDownDataWindow、DropDownListBox等标准控件都可以有效地避免用户无效输入,而不必 另外编程来进行有效性验证,同时可避免用户在某一个输入点反复作输入尝试而耽误很多时间。
在一个应用系统中,开发者应当避免用户作出未经授权或没有意义的操作,在PowerBuilder中菜单和按钮等对象有Enabled和Visible的属性,因此对用户未授权或无法进行的操作应将相应对象的属性改为Disabled和Invisib le。例如在一个窗口中有一个数据输入窗口和一个删除按钮。在编辑一条新记录时,删除按钮是无效的,因此,这个按钮的属性应为Disable。当窗口的状态发生变化时,应当随时改变控件或菜单项的这两个属性。
当对象无效时,使用该控件的Disable属性还是Invisible属性是个人习惯问题。一般地,在一个菜单项或控件永远是无效时应当使用Invisible属性,例如一个用户打开一个有删除键的窗口,但是这个用户没有删除权限,那么这个按钮就应当是不 可见的;而如果用户有权删除,只是在当前状态下,无法执行删除功能,如编辑新记录,这时该按钮应当设置成Disable。
数据窗口是一个单一的封装的对象,当不希望用户输入某一列时,不能将整个数据窗口的属性设成Disable,而是应当采用其它的方法,一般来讲,有以下三种方式:将该列的Tab Order设为0,这样用户将无法按tab键或用鼠标聚焦在该列上。如果采用这一方法,应当将其原有的TabOrder值存储在一个实例变量中,以便在需要时恢复。将
列的Display Only或Protect属性设为真。这两个属性设为真时,可以使该列得以聚焦(只要tab order不为0),用户还可以在该列上选中一些文字及水平、垂直滚屏,只是这一列的值不能作修改。如果数据库中的某列大篇幅的多行文字只能显示而不能修改时,可以采用这一方法,但应注意该列的tab order不能为0,这样保留用户在必要时对其中的部分内容进行拷贝的权利。2将该列的Visible属性设为假。这样该列自动将tab order设为0而无法聚焦。当这一值再改为真时,tab order的值仍能恢复。这一方法的缺点是在改变属性时屏幕会出现闪烁,因此这一方法不能滥用。 2将系统出现的错误提示信息尽可能淡化处理是使得用户有安全感的重要因素。开发者应当预见到某些可能出现的错误,尽可能避免系统缺省的错误信息出现,一方面由于这些信息本身没有汉化,而且过于专业化,用户不易理解,另一方面也容易使用户以为自己操作错误, 造成不安全感。例如用户可能会在输入数据时违反了数据库的约束条件,开发者应当在PowerBuilder发出SQL语句向数据库提交前对此进行必要的有效性检验。当然使用下拉列表框等方法可以实现外键约束。如果用户直接从键盘输入,须在对数据作upda te之前先验证其有效性。数据库中有些列有非空的约束,如果用户对某些列还没有填入值时就提交数据库会也返回错误,因此在开发者设计窗口时,应对数据库的非空约束等条件先作一预览,不要让从DBMS发出的错误信息直接显示给用户。另外在使用数据窗口前,应 确保每一列都在update选项中被选中(在数据窗口画笔菜单的Rows|Update中),否则系统在DataWindow做Update和Insert操作时,将不包括该列。PowerBuilder中,数据窗口画笔里列的Required Field属性是一个界面很不友好的属性。一旦聚焦在该列上,没有输入任何东西就离开或者提交数据窗口时该列没有值,系统都不允许。即使不知该输入什么,想查询一下其他窗口时,也要先在该列中写入一些东西,才能关团这个窗口,因此建议一般不采用这一属性, 而是要通过编程来做检查,可以把这段代码放在UpdateStart事件中,这一事件在执行update()函数时触发。
在用户要作出不易恢复的操作前,应对用户作适当的提示,这样在用户打算探索系统新功能时没有后顾之忧。例如用户不经意下删除一些记录要恢复它们是困难的,因此在用户删除前,出一个提示窗口等。在系统修改了记录却没有存盘就退出之前,应在CloseQuer y事件提示等信息。
在应用程序设计的全过程中,必须记住要编写安全的应用这一重要因素,这样才能在该应用使用时少产生错误,减小维护的压力,这些注意事项有、 I. 统一的外观;
II. 引用对象前的有效性检验; III. 使用正确的数据窗口列名;
IV. 使用适当的GUI控件来使得用户输入有效; V. 需要时对数据窗口的列作保护; VI. 提交前对数据窗口列作约束检验; VII. 避免用户进入危险地带; VIII. 对用户不经意的操作作出提示
五、在菜单上增加图标声明:Declare Function GetMenu Lib \"user32\" (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib \"user32\" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib \"user32\" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function SetMenuItemBitmaps Lib \"user32\" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long Public Const MF_BITMAP = &H4& Type MENUITEMINFO cbSize As Long fMask As Long fType As Long fState As Long wID As Long hSubMenu As Long hbmpChecked As Long hbmpUnchecked As Long dwItemData As Long dwTypeData As String cch As Long End Type
Declare Function GetMenuItemCount Lib \"user32\" (ByVal hMenu As Long) As Long
Declare Function GetMenuItemInfo Lib \"user32\" Alias \"GetMenuItemInfoA\" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Boolean Public Const MIIM_ID = &H2 Public Const MIIM_TYPE = &H10 Public Const MFT_STRING = &H0&
使用: 在 Form1 中增加一个 PictureBox1, AutoSize 为 True, 放一个小 Bmp (不是 Icon!推荐 13*13)。Private Sub Command1_Click() 'Get the menuhandle of your app hMenu& = GetMenu(Form1.hwnd)
'Get the handle of the first submenu (Hello) hSubMenu& = GetSubMenu(hMenu&, 0)
'Get the menuId of the first entry (Bitmap) hID& = GetMenuItemID(hSubMenu&, 0) 'Add the bitmap
SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Pic
ture
'You can add two bitmaps to a menuentry 'One for the checked and one for the unchecked 'state. End Sub
六、系统菜单上的图标在 Windows 95 的系统工具栏(“开始”按钮的工具栏)上加上自己的图标似乎是一件很时髦的事。在 VB5 中,我们可以用比较简单的方法地实现这一技术、VB5 的企业版及专业版的 CD-ROM 上其实提供了许多有关 VB 的一些很有用的东西。我们现在讨论的问题的解决方法也在此列。打开你的 CD-ROM,在 \\TOOLS\\UNSUPPRT\\SYSTRAY 这个目录里就提供了一个 ActiveX 控件的源代码。此控件的目的就是在系统菜单上加上自己的图标。你可以把它编译成一个 OCX 供调用或直接在程序里面包含此模块。
七、菜单项的动态装入菜单项的动态装入是指菜单项的个数不固定. 例子就是文件菜单中最近打开的文件的列表。在第一次打开文件之前,该列表是空的,并且不在文件菜单中出现;打开一个文件后,该列表不再是空的,并且文件菜单中出现代表被打开文件的菜单项。
具体的实现过程如下:在文件菜单里增加一个菜单项,标题任意,并假设菜单项的Name属性是opened_files_ list;
更改菜单项opened_files_list的可见属性,使 opened_files_list.Visible=False
更改菜单项opened_files_list的下标属性,使 opened_files_list.Index=0
在程序中控制菜单项opened_files_list的动态装入。假设要显示打开过的第二个文件的文件名,并且该文件名存放在一个文件名数组opened _file_name里。以下的代码就实现了这一功能、 Load opened_files_list(1)
opened_files_list(1).Caption=\"&2\"+opened_file_name(1) opened_files_list(1).Visible=True
需要注意的是,对于下标为0的菜单项,不能用Load方法。因为在程序执行时,该菜单项就 已经被装入到内存里了;另外,在菜单项的标题属性字符里的\"&\"字符具有特殊的含义,它的作 用是在显示该属性字符串的同时,并不显示\"&\"本身,而紧跟\"&\"的字符在显示时具有下划线, 并且该字符成为热键。
如果下标不为0的菜单项不再需要,为了减少对内存资源的占用,可以用Unload方法把它 从内存卸出;同样地,不能用Unload卸出下标为0的菜单项。
因篇幅问题不能全部显示,请点此查看更多更全内容