如何向窗口上下文菜单添加更多项目

时间:2012-08-08 23:08:22

标签: vb.net contextmenu

我正在为我工​​作的公司制作应用程序,我想知道如何自定义窗口的上下文菜单,如PuTTY(又名,它有“新会话...”等)。我看过谷歌,无法找到我正在寻找的答案。

1 个答案:

答案 0 :(得分:2)

制作新模块并在顶部添加Imports System.Runtime.InteropServices

然后声明这个

<Flags()> _
Public Enum MenuFlags As Integer
    MF_BYPOSITION = 1024
    MF_REMOVE = 4096
    MF_SEPARATOR = 2048
    MF_STRING = 0
End Enum

<DllImport("user32.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Function GetSystemMenu(ByVal hWnd As IntPtr, Optional ByVal bRevert As Boolean = False) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Function AppendMenu(ByVal hMenu As IntPtr, ByVal uFlags As MenuFlags, ByVal uIDNewItem As Int32, ByVal lpNewItem As String) As Boolean
End Function

然后在表单加载处理程序上添加此代码

Dim sysmenu As IntPtr = GetSystemMenu(Me.Handle)
AppendMenu(sysmenu, MenuFlags.MF_STRING, &H1FFF, "Hello")

然后,为了能够捕获用户点击您的新菜单项,您必须实现此功能,该功能将捕获所有消息,只需将其添加到您的表单代码

   Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
      If m.Msg = WM_SYSCOMMAND Then
          If m.WParam.ToInt32 = &H1FFF Then
               ' your menu item is clicked, call a function here
          End If
      End If
      MyBase.WndProc(m)
   End Sub