在Windows应用程序中,利用弹出式菜单(Pop-up Menu)是增加软件易用性的一个重要方式。本文将向大家介绍在vb6.0中实现弹出式菜单的几种方法。
PopupMenu方法(Method)是VB6.0内置的实现弹出式菜单的方法,用于在MDIForm或Form等对象中的鼠标点位置或指定位置显示弹出式菜单。其语法为:
Object.PopupMenu menuname, flags, x, y, boldcommand
说明如下:
Object | 可选项,可以是PropertyPage, Usercontrol, UserDocument, Form, MDIForm等对象之一,如果该部分省略,则具有焦点(Focus)的Form对象将作为此Object。 | ||
Menuname | 必须,将被显示的弹出式菜单的名称,此菜单必须至少包含一个子菜单 | ||
Flags | 可选项,一个值或常数,设置弹出式菜单显示的位置及行为方式,定义如下: | ||
常数(位置) | 值 | 说明 | |
VbPopupMenuLeftAlign | 0 | (缺省值)弹出式菜单左对齐于X | |
VbPopupMenuCenterAlign | 4 | 菜单居中于X | |
VbPopupMenuRightAlign | 8 | 弹出式菜单右对齐于X | |
常数(行为) | 值 | 说明 | |
VbPopupMenuLeftButton | 0 | (缺省值)只能通过点击鼠标左键来选择弹出式菜单的菜单项 | |
VbPopupMenuRightButton | 2 | 可以通过点击鼠标的左键或右键来选择弹出式菜单的菜单项 | |
X | 可选项,设定显示弹出式菜单的X坐标,如省略,鼠标点坐标将被作为X使用 | ||
Y | 可选项,设定显示弹出式菜单的Y坐标,如省略,鼠标点坐标将被作为Y使用 | ||
Boldcommand | 可选项,定义弹出式菜单中某一个菜单项的名称,该菜单项文字将被加粗显示,如省略该项,则无菜单项文字被加粗。 |
通过设置对象(Object)的Scalemode属性来规定X,Y坐标的度量单位,X,Y坐标设定弹出式菜单在对象(Object)中显示的相对位置,如果省略X,Y,则弹出式菜单将显示在当前鼠标点位置。
当用PopupMenu方法激活弹出菜单后,要等到用户选择了弹出菜单中的某个菜单项之后(这种情况下,还要先运行被选择菜单项的相应代码)或在表单其它位置单击鼠标左键消除弹出菜单后,后面的代码才能继续执行。并且,一次只能激活一个弹出式菜单,当已经有一个弹处菜单被激活或已经有一个下拉菜单被打开时,对PopupMenu方法的调用将被忽略。
下面的例子演示当用户在表单上点击鼠标右键时,在鼠标点处显示弹出式菜单。欲试验此例子,建立一个表单,在表单中建立一个菜单控件,将其命名为mnuFile(mnuFile菜单至少包含一个子菜单)。在表单的声明(Declaration)区域加入如下代码:
Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
PopupMenu mnuFile
End If
End Sub
PopupMenu方法是VB6.0内置的方法,使用起来方便简单,但该方法有一个不足,即当点击鼠标弹出菜单后,如果不选择菜单项而在其他位置点击鼠标,则菜单并不会在新的鼠标点处显示。这虽然不至于影响应用程序的功能,但却降低了易用性。
除了利用VB6.0内置的PopupMenu方法来实现弹出式菜单外,还可以利用Windows 的应用程序接口(API)函数中的菜单函数来实现弹出式菜单。
利用API的菜单函数实现弹出式菜单与VB6.0内置的PopupMenu方法相比,要复杂一些,但却弥补了PopupMenu方法的不足点,即当弹出菜单后不选择菜单项而在其它位置点击鼠标时,弹出式菜单会立即出现在那个位置。并且利用API函数,编程者可以更加灵活、自由度更大