في الكود الذي سأضعه هنا سنقوم بإضافة بندين لقائمة النظام الخاصة بالنموذج ثم سنرى أنه يمكننا كتابة كود لتنفيذ أوامر من خلالهما وذلك شي شبيه بالصورة
أولا – في قسم الإعلانات العامة نضيف التعريفات التالية:
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, _ ByVal bRevert As Boolean) As Integer Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _ (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer _ , ByVal lpNewItem As String) As Integer Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _ ByVal nPosition As Long, ByVal wFlags As Long) As Long Const MF_BYPOSITION = &H400& Const MF_REMOVE = &H1000& Const MF_SEPARATOR = &H800& Const WM_SYSCOMMAND As Integer = &H112
ثانيا – في حدث التحميل للنموذج نقوم بالحصول على مقبض نافذة النظام بواسطة الأمر GetSystemMenu ثم نقوم بإضافة البنود التي نريدها لقائمة النظام بواسطة AppendMenu
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim hSysMenu As Integer hSysMenu = GetSystemMenu(Me.Handle.ToInt32, False) 'appends new menu items AppendMenu(hSysMenu, MF_SEPARATOR, 1000, "") AppendMenu(hSysMenu, 0, 1001, "New Item1") AppendMenu(hSysMenu, 0, 1002, "New Item2") End Sub
ثالثا – في الـ Override لـ WndProc نستخدم كود شبيه بالتالي لمعرفة أي بند من القائمة تم نقره
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If m.Msg = WM_SYSCOMMAND Then
Select Case m.WParam.ToInt32
Case 1001
MsgBox("Clicked: New Item1")
Case 1002
MsgBox("Clicked: New Item2")
End Select
End If
End Sub