2024年5月31日发(作者:)

在VB6.0中实现弹出式菜单的几种方法

在Windows应用程序中,利用弹出式菜单(Pop-up Menu)是增加软件易用性的一个重要方式。本文

将向大家介绍在VB6.0中实现弹出式菜单的几种方法。

利用VB6.0内置的PopupMenu方法

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

6-1

在VB6.0中实现弹出式菜单的几种方法

End If

End Sub

PopupMenu方法是VB6.0内置的方法,使用起来方便简单,但该方法有一个不足,即当点击鼠标弹出

菜单后,如果不选择菜单项而在其他位置点击鼠标,则菜单并不会在新的鼠标点处显示。这虽然不至

于影响应用程序的功能,但却降低了易用性。

利用Windows API函数

除了利用VB6.0内置的PopupMenu方法来实现弹出式菜单外,还可以利用Windows 的应用程序接口

(API)函数中的菜单函数来实现弹出式菜单。

利用API的菜单函数实现弹出式菜单与VB6.0内置的PopupMenu方法相比,要复杂一些,但却弥补了

PopupMenu方法的不足点,即当弹出菜单后不选择菜单项而在其它位置点击鼠标时,弹出式菜单会立

即出现在那个位置。并且利用API函数,编程者可以更加灵活、自由度更大地实现弹出式菜单。

本文用到的API函数为:GetMenu, GetSubMenu, GetMenuItemInfo, InsertMenuItem,

CreatePopupMenu, DestroyMenu, TrackPopupMenu。下面先简单介绍一下这几个函数。

GetMenu

GetMenu函数返回指定窗口的菜单的句柄

语法:

GetMenu ( HWnd )

参数的意义

HWnd 窗口句柄,该窗口所包含的菜单的句柄将被函数返回

GetSubMenu GetSubMenu函数返回下拉菜单或被指定菜单项激活的子菜单的句柄

语法:

GetSubMenu ( hMenu, nPos )

参数的意义

Hmenu 菜单句柄

NPos 定义激活下拉菜单或子菜单的菜单项在所给菜单中的相

对位置(起始为0)

GetMenuItemInfo GetMenuItemInfo函数返回菜单项的信息

语法:

GetMenuItemInfo ( hMenu, uItem, fByPosition, lpmii )

参数的意义

Hmenu 包含相应菜单项的菜单的句柄

Uitem 欲获得其信息的菜单项的标识号或位置,该参数的具体

意义由fByPositon参数的值来决定

FbyPosition 用来定义uItem参数的意义,如果此参数的值为False,

则uItem参数为菜单项的标识号,否则,为菜单项的位

Lpmii 指向MENUITEMINFO结构变量的指针,该变量指定了需要

返回菜单项的哪些信息,并接收这些信息。MENUITEMINFO

结构各元素说明如下:

CbSize 结构占用的字节数

Fmask 设置欲获得结构中哪些元素的值

Ftype 菜单项类型

Fstate 菜单项状态

WID 标识菜单项的16位值

6-2