2012-08-08 100 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

相關問題