• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Thay đổi menu hệ thống của form

Các bài viết hướng dẫn về Visual Basic .NET và C#

Moderators: tungcan5diop, QUANITGROBEST

User avatar
akira
Thành viên danh dự
Thành viên danh dự
Posts: 354
Joined: Sat 25/10/2008 11:11 pm
Has thanked: 6 times
Been thanked: 69 times

Thay đổi menu hệ thống của form

Postby akira » Tue 29/07/2014 11:11 am

Tên bài viết: Thay đổi menu hệ thống của form
Tác giả: akira
Cấp độ bài viết: Bình thường
Tóm tắt: Thay đổi menu mặc định của form



Đối với những ứng dụng nhỏ hay những tool làm ra với yêu cầu form phải nhỏ, việc thêm vào một hàng menustrip có thể làm tăng kích thước của form một cách không cần thiết. Mỗi lần bạn click chuột vào cái icon trên form hoặc click chuột phải vào thanh border, sẽ có một menu mặc định đổ xuống. Ta sẽ tận dụng cái menu này làm của riêng vậy ;)

Image

Toàn bộ những hàm để chỉnh sửa menu này các bạn có thể tìm thấy tại đây: http://msdn.microsoft.com/en-us/library/windows/desktop/ff468865(v=vs.85).aspx

Namespace cần thiết:
  1. Imports System.Runtime.InteropServices


Khai báo các hàm:
[vbnet]<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Private Shared Function GetSystemMenu(hWnd As IntPtr, bRevert As Boolean) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Private Shared Function InsertMenu(hMenu As IntPtr,
uPosition As Integer,
uFlags As Integer,
uIDNewItem As Integer,
lpNewItem As String) As Boolean
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
Private Shared Function SetMenuItemBitmaps(hMenu As IntPtr,
uPosition As Integer,
uFlags As Integer,
hBitmapUnchecked As Integer,
hBitmapChecked As Integer) As Boolean
End Function[/vbnet]

Các biến:
[vbnet]Const MF_BYPOSITION As Integer = &H400
Dim SYSMENU_ABOUT_ID As Integer = &H0[/vbnet]

Thêm menu mới:
[vbnet] Protected Overrides Sub OnHandleCreated(e As EventArgs)
MyBase.OnHandleCreated(e)
Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)
InsertMenu(hSysMenu, SYSMENU_ABOUT_ID, MF_BYPOSITION, SYSMENU_ABOUT_ID, "About")
Dim pic_about As Bitmap = Image.FromFile(My.Application.Info.DirectoryPath & "\about.bmp")
SetMenuItemBitmaps(hSysMenu, SYSMENU_ABOUT_ID, MF_BYPOSITION, pic_about.GetHbitmap, pic_about.GetHbitmap)
End Sub[/vbnet]
Icon phải là file bitmap, kích thước để 13x13 là đẹp :D

Bắt sự kiện khi click chuột:
[vbnet] Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If (m.Msg = WM_SYSCOMMAND) AndAlso (CInt(m.WParam) = SYSMENU_ABOUT_ID) Then MsgBox("Hello!")
End Sub[/vbnet]

WindowsApplication1.rar
(32.07 KiB) Downloaded 292 times



Return to “[.NET] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 0 guests