2012-08-08 83 views
0

我正在为我工​​作的公司制作应用程序,我想知道如何自定义窗口的上下文菜单,如PuTTY's(又名,它有“新会话...”等等。)。我已经遍布谷歌,找不到我正在寻找的答案。如何添加更多项目到窗口上下文菜单

+1

你是指系统菜单吗?我的意思是当你点击窗口标题栏时弹出的那个? – UnLoCo 2012-08-08 23:11:49

+0

当我点击窗口标题栏(一个“关闭”,等) – JohnHoulderUK 2012-08-08 23:20:11

+0

好吧,我已经做过那一次,我会尝试回忆你的方法,我记得我用winapi来实现它 – UnLoCo 2012-08-08 23:21:49

回答

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 
+0

感谢您的代码! – JohnHoulderUK 2012-08-09 00:18:51

+0

@GtoXic:这段代码只在菜单的底部添加了一个新项目,我将进行编辑,以便您可以获得有关如何将菜单项放置在任何位置的解决方案 – UnLoCo 2012-08-09 00:20:44

+0

http://stackoverflow.com/questions/6952343 /需要的帮助,在窗口-API insertmenuitem – UnLoCo 2012-08-09 00:31:58

相关问题