首页 - 经验之谈 - 在VB6.0中实现弹出式菜单的几种方法

如题所述

---- PopupMenu方法(Method)是VB6.0内置的实现弹出式菜单的方法,用于在MDIForm或Form等对象中的鼠标点位置或指定位置显示弹出式菜单。其语法为:
Object.PopupMenu menuname,
flags, x, y, boldcommand
---- 说明如下:
---- Object 可选项,可以是PropertyPage, Usercontrol, UserDocument, Form, MDIForm等对象之一,如果该部分省略,则具有焦点(Focus)的Form对象将作为此Object。
---- 通过设置对象(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 mnuFileEnd IfEnd 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。下面先简单介绍一下这几个函数。
三、 利用工程(Project)中其他表单的菜单作为当前表单的弹出菜单
---- 如果表单(Form)的菜单中不包含弹出菜单需要的菜单项,那么可以新建一个表单,在新表单中建立一个与所需弹出菜单完全一样的菜单及相应代码。然后在MouseDown事件中利用GetMenu和GetSubMenu函数来获得新表单中的菜单句柄,再利用TrackPopupMenu函数激活弹出式菜单。
---- 下面的例子演示当在表单中单击鼠标右键时,在鼠标点位置显示弹出式菜单,此弹出式菜单是通过调用另外一个表单中的菜单得到的。要试验这个例子,需要创建两个表单,一个命名为Form1,另一个命名为MnuForm。在MnuForm中加入一个菜单控件,将其命名为MnuFile(MnuFile中至少要包含一个子菜单)。添加一个模块(Module),在模块的声明(Declaration)区域添加如下代码:
---- 在Form1的声明(Declaration)区域添加如下代码:
四、 利用表单中的菜单项实现弹出式菜单
---- 如果表单的菜单中包含了弹出菜单所需的菜单项,那么可以通过CreatePopupMenu函数生成一个空的pop-up menu,然后利用GetMenuItemInfo函数从表单的菜单中获得相应菜单项的内容,再用InsertMenuItem函数将菜单项加入到pop-up menu中,最后使用TrackPopupMenu函数激活弹出式菜单。
---- 下面的例子演示当在表单中单击鼠标右键时,在鼠标点位置显示弹出式菜单,此弹出式菜单是通过调用表单中的若干菜单项得到的。要试验这个例子,需要创建一个表单。
温馨提示:答案为网友推荐,仅供参考
相似回答