• 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#

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
akira
Thành viên danh dự
Thành viên danh dự
Bài viết: 354
Ngày tham gia: T.Bảy 25/10/2008 11:11 pm
Has thanked: 6 time
Been thanked: 69 time

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

Gửi bàigửi bởi akira » T.Ba 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 ;)

Hình ảnh

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:
  1. <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
  2.     Private Shared Function GetSystemMenu(hWnd As IntPtr, bRevert As Boolean) As IntPtr
  3.     End Function
  4.  
  5.     <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
  6.     Private Shared Function InsertMenu(hMenu As IntPtr,
  7.                                        uPosition As Integer,
  8.                                        uFlags As Integer,
  9.                                        uIDNewItem As Integer,
  10.                                        lpNewItem As String) As Boolean
  11.     End Function
  12.  
  13.     <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)>
  14.     Private Shared Function SetMenuItemBitmaps(hMenu As IntPtr,
  15.                                                uPosition As Integer,
  16.                                                uFlags As Integer,
  17.                                                hBitmapUnchecked As Integer,
  18.                                                hBitmapChecked As Integer) As Boolean
  19.     End Function


Các biến:
  1. Const MF_BYPOSITION As Integer = &H400
  2. Dim SYSMENU_ABOUT_ID As Integer = &H0


Thêm menu mới:
  1.     Protected Overrides Sub OnHandleCreated(e As EventArgs)
  2.         MyBase.OnHandleCreated(e)
  3.         Dim hSysMenu As IntPtr = GetSystemMenu(Me.Handle, False)
  4.         InsertMenu(hSysMenu, SYSMENU_ABOUT_ID, MF_BYPOSITION, SYSMENU_ABOUT_ID, "About")
  5.         Dim pic_about As Bitmap = Image.FromFile(My.Application.Info.DirectoryPath & "\about.bmp")
  6.         SetMenuItemBitmaps(hSysMenu, SYSMENU_ABOUT_ID, MF_BYPOSITION, pic_about.GetHbitmap, pic_about.GetHbitmap)
  7.     End Sub

Icon phải là file bitmap, kích thước để 13x13 là đẹp :D

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


WindowsApplication1.rar
(32.07 KiB) Đã tải 225 lần



Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách