PDA

View Full Version : آموزش: اضافه کردن MenuItem به منوی سیستمی فرم



ROSTAM2
جمعه 18 آذر 1401, 15:30 عصر
سلام.

در این تاپیک چگونگی اضافه کردن یک MenuItem به منوی سیستمی فرم با توابع API رو قدم به قدم خواهیم داشت:

1- یک شیء ContextMenu به فرم اضافه کنید(اگر در جعبه ابزار (ToolBox) ندارید اون رو با راست کلیک روی جعبه ابزار و انتخاب آیتم Choose Items از منوی راست کلیک اون از بین اشیاء و کامپوننت های .Net به جعبه ابزار اضافه کنید):

154340

2- برای ContextMenu یک آیتم با متن ...About ایجاد کنید:

154341

3- یک About Box به پروژه اضافه کنید:

154342

4- به فرم اصلی برگشته و برای رویداد MenuItem ایجاد شده About رویداد کلیک را انتخاب و این کد را در رویداد گفته شده بنویسید:

Private Sub MenuItem1_Click(sender As Object, e As EventArgs) Handles MenuItem1.Click
Dim AboutBox As New AboutBox1
AboutBox.Show(Me)
End Sub


5- برای اضافه کردن آیتم به منوی سیستمی فرم به 3 تابع از توابع API نیاز داریم: (GetSystemMenu و GetMenuItemID و InsertMenu)

Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (
ByVal hwnd As Long,
ByVal bRevert As Boolean) As Long


Declare Function GetMenuItemID Lib "user32" (
hMenu As IntPtr,
nPos As Integer) As Integer


Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (
ByVal hMenu As Long,
ByVal nPosition As Long,
ByVal wFlags As Long,
ByVal wIDNewItem As Long,
ByVal lpNewItem As String) As Long

6- قبل از هر چیز مقدار Handle از منوی سیستمی فرم را نیاز داریم که تابع GetSystemMenu با گرفتن Handle از فرم Handle از منوی سیستمی اون رو برمی گردونه:

Dim SysMenu As Long = GetSystemMenu(Me.Handle.ToInt64, False)
7- و توسط تابع GetMenuItemID مقدار آی.دی MenuItem رو بدست میاریم:

Dim hMenuItem As Long = GetMenuItemID(MenuItem1.Parent.Handle.ToInt64, MenuItem1.Index)
8- و برای اضافه کردن MenuItem به منوی سیستمی، تابع InsertMenu از API:

InsertMenu(SysMenu, position,&H0& , hMenuItem, MenuItem1.Text)
ورودی اول منوی سیستمی، ورودی دوم شماره Index برای اضافه شدن آیتم، ورودی سوم Flags که در اینجا MF_STRING = &H0& است، ورودی چهارم آی.دی بدست آمده توسط تابع GetMenuItemID است و ورودی آخر متن MenuItem است.

همه این دستورات که از توابع API استفاده شده را در رویداد Load از فرم قرار دهید و دیباگ را شروع کنید:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim SysMenu As Long = GetSystemMenu(Me.Handle.ToInt64, False)
Dim hMenuItem As Long = GetMenuItemID(MenuItem1.Parent.Handle.ToInt64, MenuItem1.Index)
InsertMenu(SysMenu, position,&H0& , hMenuItem, MenuItem1.Text)
End Sub
154343