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函數激活彈出式菜單。
---- 下面的例子演示當在表單中單擊鼠標右鍵時,在鼠標點位置顯示彈出式菜單,此彈出式菜單是通過調用表單中的若幹菜單項得到的。要試驗這個例子,需要創建壹個表單。