3

友人、実行時に VB6 で複数のレベルのサブメニューを生成する方法を教えてください。簡単に説明しますか?特定のコントロールはありますか?しかし、私は外部コントロールを使用したくありません!

4

2 に答える 2

4

API 関数を使用して複数レベルのサブメニューを作成できます

Private Declare Function CreatePopupMenu Lib "user32" () As Long

Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hmenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Declare Function TrackPopupMenu Lib "user32" (ByVal hmenu As Long, ByVal wFlags As Long, ByVal X As Long, ByVal Y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As Any) As Long

Private Declare Function DestroyMenu Lib "user32" (ByVal hmenu As Long) As Long

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Dim hmenu As Long, hSubMenu As Long
Private Const MF_STRING = &H0&
Private Const MF_SEPARATOR = &H800&


  hSubMenu = CreatePopupMenu
  AppendMenu hSubMenu, 0, 121, "Sub Menu1"
  AppendMenu hSubMenu, 0, 122, "Sub Menu2"

  hmenu = CreatePopupMenu
  AppendMenu hmenu, 0, 107, "Menu1"

  AppendMenu hmenu, 0, 106, "Menu2"

  AppendMenu hmenu, MF_POPUP, hSubMenu, "Menu3"
  AppendMenu hmenu, MF_POPUP, hSubMenu, "Menu4"

  AppendMenu hmenu, 0, 101, "Menu5"

表示する

  If Button = vbRightButton Then
    Dim P As POINTAPI
    GetCursorPos P
    TrackPopupMenu hmenu, 0, P.X, P.Y, 0, hwnd, 0

を呼び出すまでメニューは表示されませんTrackPopupMenu。その戻り値は、どのメニュー項目が選択されたかを示すことができます (存在する場合)。たとえば、「Menu1」が選択された場合、「107」が返されます。

于 2011-08-09T09:10:45.800 に答える
2

標準の VB メニューでこれを行うことができますが、コントロール配列を使用する必要があるため、設計時に (通常は非表示) でIndex = 0最初のプロトタイプ メニューを作成する必要があります。mnuFoo(0)新しいアイテムを動的にロードできるようになりました。

Call Me.Load(mnuFoo(1)) ' New array member (index 1) '
With mnuFoo(1)
    .Visible = True ' Make it visible
    ' --- Do some settings
End With
于 2009-05-23T17:43:39.577 に答える