|
การ Lock MDI Form ใน VB.NET (Windows Forms Application) |
การ Lock MDI Form ใน VB.NET (Windows Forms Application) คือบางครั้งในการเขียนโปรแกรม เช่นต้องการ Fix ให้หน้าจอของฟอร์มหลัก ประมาณเท่านี้ไม่ต้องการให้ขยาย ในส่วนของ VB อาจมี Properties ที่เราไม่รู้จักอีกมากมาย แต่ ก็งมหามาหลาย ชั่วโมงเหมือนกัน แต่ ฟอร์มปกติ lock ง่าย มาก แต่ว่า MDI FORM นี้สิ ใครเคย LOCK บ้าง ลองมาดูกันค่ะ อิอิ
ในส่วนของ MDI FORM ต้องเขียน แบบนี้
Code (VB.NET)
Option Explicit
Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Private Const WS_CAPTION = &HC00000
Private Const WS_THICKFRAME = &H40000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const SC_CLOSE As Long = &HF060&
Private Const SC_MAXIMIZE = &HF030&
Private Const SC_MINIMIZE = &HF020&
Private Const MIIM_STATE As Long = &H1&
Private Const MIIM_ID As Long = &H2&
Private Const MFS_GRAYED As Long = &H3&
Private Const WM_NCACTIVATE As Long = &H86
Private Type MENUITEMINFO
cbSize,fMask,fType,fState,wID,hSubMenu,hbmpChecked,hbmpUnchecked,dwItemData,dwTypeData,cch As Long
End Type
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Long
Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
จากนั้น ทำการสร้าง Function ขึ้นมาใหม่ หรือ Sub นั่นแหละ ใช้ในการเรียกใช้ของแต่ละ บุคคลไป
Code (VB.NET)
Public Sub DisableFormResize(frm As Form)
Dim style As Long
Dim hMenu As Long
Dim MII As MENUITEMINFO
Dim lngMenuID As Long
Const xSC_MAXIMIZE As Long = -11
style = GetWindowLong(frm.hwnd, GWL_STYLE)
style = style And Not WS_THICKFRAME
style = style And Not WS_MAXIMIZEBOX
style = SetWindowLong(frm.hwnd, GWL_STYLE, style)
On Error Resume Next
hMenu = GetSystemMenu(frm.hwnd, 0)
With MII
.cbSize = Len(MII)
.dwTypeData = String(80, 0)
.cch = Len(.dwTypeData)
.fMask = MIIM_STATE
.wID = SC_MAXIMIZE
End With
If GetMenuItemInfo(hMenu, MII.wID, False, MII) = 0 Then Exit Sub
With MII
lngMenuID = .wID
.wID = xSC_MAXIMIZE
.fMask = MIIM_ID
End With
If SetMenuItemInfo(hMenu, lngMenuID, False, MII) = 0 Then Exit Sub
With MII
.fState = (.fState Or MFS_GRAYED)
.fMask = MIIM_STATE
End With
If SetMenuItemInfo(hMenu, MII.wID, False, MII) = 0 Then Exit Sub
SendMessage hwnd, WM_NCACTIVATE, True, 0
frm.Width = frm.Width - 1
frm.Width = frm.Width + 1
End Sub
เวลาเรียกใช้งาน ก็แค่เรียกใช้ ชื่อของ Function(ฟอร์มอะไร) ยกตัวอย่างเช่น
DisableFormResize(MdiFormMain)
หมายความว่าให้ทำการล๊อกขนาด MdiFormMain จ้า
|
|
|
|
|
|