在VB中制作图标按钮的四种方法2010-07-19 17:31发信人:h u a n g h m(东方不败),信区:P r o g r a m标题:V B中图标按钮的制作发信站:深大荔园晨风站(T u e J a n1311:11:081998),转信现在大多数W i n d o w s应用程序的功能都比较丰富,相应的菜单结构也比较复杂。
一些操作命令往往要打开好几层菜单。
尤其是一些常用的操作命令,因其使用较频繁,即使仅打开一层菜单,从中选择一项也是比较麻烦的。
因此现在绝大多数W i n d o w s应用程序中除了菜单之外,还配备了工具栏。
工具栏中有与常用菜单命令相对应的按钮,按这些按钮的效果和选择菜单命令的效果完全一样。
工具栏中的按钮和普通按钮不同的是,它们不用文本字符串,而是用图标来标明按钮的功能。
这种图标按钮的好处是省地方,菜单命令往往比较冗长,而工具栏提供的空间又十分有限。
使用图标按钮最大的好处还在于其直观形象性,这与W i n d o w s图形用户界面(G U I)方便用户、简化操作的目标是一致的。
W i n d o w s系统提供的标准按钮(如O K、C a n c e l等)中只能显示文本字符串。
在V i s u a l B a s i c(以下简称为V B)中,按钮是使用工具箱中的命令按钮控件C o m m a n d B u t t o n来实现的。
C o m m a n d B u t t o n使用的是W i n d o w s系统提供的标准按钮控件,因而无法装入图标。
下面介绍在V B中实现图标按钮的几种方法。
一、使用标准控件实现图标按钮V B的标准控件中,能够装入图形的只有I m a g e(图像)和P i c t u r e B o x(图片框)两种。
I m a g e的功能较简单,占用系统资源较少。
P i c t u r e B o x的功能很丰富,可以将它看作是I m a g e的一个“超集”,它占用的系统资源当然就要多一些。
为了利用可装入图形的控件模拟图标按钮的功能,首先应比较一下它们各自所能够接收到的事件(如表1所示)。
表1中打勾(√)的表示该控件提供了相应的事件驱动过程接口,打叉(×)的则表示该控件没有提供,控件不接收相应的事件。
因为是要模拟C o m m a n d B u t t o n的功能,所以I m a g e和P i c t u r e B o x的其它事件没有列出。
C o m m a n d B u t t o n的事件I m a g e P i c t u r e B o xC l i c k√√D r a g D r o p√√K e y D o w n×√K e y P r e s s×√K e y U p×√L o s t F o c u s×√M o u s e D o w n√√M o u s e M o v e√√M o u s e U p√√表1I m a g e和P i c t u r e B o x与C o m m a n d B u t t o n中相同的事件从表1中可以看出,P i c t u r e B o x具有C o m m a n d B u t t o n中所有事件的接口,因而可以完全模拟C o m m a n d B u t t o n的功能。
C o m m a n d B u t t o n的某些事件在I m a g e中接收不到。
对于一般应用来说,我们往往只对C o m m a n d B u t t o n的C l i c k事件过程编程,因此I m a g e也可以用于模拟C o m m a n d B u t t o n,而且能够满足大多数应用的需要。
注意,在没有配备鼠标的系统中,因为只能使用键盘作为输入设备,而I m a g e又没有键盘事件的接口,这时就只能用P i c t u r e B o x了。
V B安装到硬盘上之后,在V B目录下提供了丰富的图形库。
其中包括位图(B i t m a p,在B I T M A P S子目录下)、图标(I c o n,在I C O N S子目录下)和图元(M e t a f i l e,在M E T A F I L E子目录下)。
每种图形又按类分别存储在不同的子目录下。
在图标按钮的制作中,我们可以使用B I T M A P S\T O O L B A R3子目录下的位图。
该目录中存储了常用工具栏中的按钮的位图,每种按钮一般有三个位图文件,分别对应按钮在松开、按下和无效时的状态。
例如,、和分别对应剪切(c u t)按钮在松开、按下和无效时的状态。
因此,我们可让按钮在松开时装入*,按下时装入*,按钮无效时装入*。
可以编写如下的相应事件过程代码(以P i c t u r e B o x实现的剪切按钮为例):S u b P i c t u r e1_M o u s e D o w n(B u t t o n A s I n t e g e r,S h i f t A s I n t e g e r,X A s S i n g l e,Y A s S i n g l e)=L o a d P i c t u r e("C:\V B\B I T-M A P S\T O O L B A R3\")'按下鼠标按钮时,装入按钮被按下时的位图E n d S u bS u b P i c t u r e1_M o u s e U p(B u t t o n A s I n t e g e r,S h i f t A s I n t e g e r,X A s S i n g l e,Y A s S i n g l e)=L o a d P i c t u r e("C:\V B\B I T M A P S\T O O L B A R3\")'松开鼠标按钮时,装入按钮被松开时的位图E n d S u bS u b P i c t u r e1_C l i c k()'此处插入单击按钮时的处理代码E n d S u b如果需要设置按钮的无效状态,则可使用如下语句:=F a l s e=L o a d P i c t u r e("C:\V B\B I T-M A P S\T O O L B A R3\")'装入按钮无效时的位图当按钮恢复为有效时,再使用下列语句:=T r u e=L o a d P i c t u r e("C:\V B\B I T M A P S\T O O L B A R3\")'装入按钮松开时的位图这样,我们就实现了用P i c t u r e B o x模拟图标按钮。
用I m a g e模拟图标按钮的方法与此完全相同。
在程序中,一般用一个P i c t u r e B o x作为工具条,这里的P i c t u r e B o x作为容器(c o n t a i n e r)控件,在P i c t u r e B o x中再加入各个图标按钮。
这在多文档界面(M D I)中的主窗体M D I F o r m上尤其有必要,因为普通控件不能直接加入到M D I F o r m中,只有具备A l i g n属性的P i c t u r e B o x才能加入到M D I F o r m。
二、使用扩充控件实现图标按钮V B的扩充控件中有几种能直接支持图标的按钮。
下面仅介绍其中的三种扩充按钮,即3D命令钮(3D C o m m a n d B u t t o n)、3D组按钮(3DG r o u p P u s h B u t t o n)和动画按钮(A n i m a t e d B u t t o n)。
使用这三种控件制作图标按钮比起使用P i c t u r e B o x或I m a g e模拟的图标按钮要方便得多。
在下面的介绍中,会给出每种控件对应的文件名和控件的对象类型,如果在工具箱中找不到该控件,则在V B的F i l e|A d d F i l e...菜单命令弹出的对话框中双击与该控件对应的文件名(一般在W i n d o w s的S Y S T E M目录下),即可将该控件加入到工具箱中。
对于扩充控件接口的特性(属性、事件和方法),我们仅介绍其扩充的部分,与标准控件相同的其它接口则不再赘述。
1、3D C o m m a n d B u t t o n文件名为,对象类型为S S C o m m a n d,属性如表2所示。
表2属性数据类型定义A u t o S i z e I n t e g e r0--(缺省状态)不调整尺寸;1--把装入的图片尺寸调整为按钮的大小。
如果装入的图片是一个图标(I c o n)或按钮本身有标题,则该值不起作用;2--把按钮的尺寸调整为装入图片的大小。
如果按钮本身有标题,则该值不起作用。
B e v e l W i d t h I n t e g e r按钮周围斜角的宽度,取值范围为0~10,缺省值为2。
F o n t3D I n t e g e r设置标题的立体显示效果:0--(缺省状态)无立体效果;1--略微凸出;2--强烈凸出;3--略微凹进;4--强烈凹进。
O u t l i n e I n t e g e r确定有无边框,取值为T r u e(缺省状态)或F a l s e。
P i c t u r e I n t e g e r位图或图标,不能是图元。
R o u n d e d C o r n e r s I n t e g e r按钮是否为圆角,取值为T r u e(缺省状态)或F a l s e。
3D C o m m a n d B u t t o n的属性3D C o m m a n d B u t t o n是一个本身具有P i c t u r e属性的按钮,用它可装入一个图片,同时它还具有按钮的功能。
3D C o m m a n d B u t t o n不能接收M o u s e D o w n和M o u s e U p之类的鼠标事件,因此不能像P i c t u r e B o x那样通过装入不同的图片来显示按钮被按下和松开的状态。
3D C o m m a n dB u t t o n之所以被称为“3D”,是因为它本身能够处理按钮按动时的三维视觉效果。
用3D C o m m a n d B u t t o n制作图标按钮时,只需装入一个按钮松开时的图片(例如,)即可,其余的无需用户操心。