📄 在vb中可以限制窗体的最小值吗.txt
字号:
你 可 以 在 Resize事 件 中 进 行 限 制 。 如 :
Private Sub Form_Resize()
If WindowState The Exit Sub
If Width < 2000 Then Width = 2000
If Height < 2000 Then Width = 2000
End Sub
如 果 你 要 是 熟 悉 MsgBlaster这 样 的 控 件 (可 以 在 QA000580 “vb6中动态建立带子菜单的菜单”下 载 ), 你 还 可 以 截 取 Windows的 WM_WINDOWPOSCHANGING这 样 的 消 息 , 这 样 可 以 使 程 序 的 外 观 上 更 好 看 。 具 体 的 做 法 参 考 QA000727 “在msgblst中如何处理指向结构变量的地址”。
<END>
下 列 代 码 可 以 锁 定 窗 口 大 小 :
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes&)
Private Declare Function CallWindowProc& Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
Private Declare Function SetWindowLong& Lib "User32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
Private procOld As Long
Private udtMMI As MINMAXINFO
Private Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case iMsg
Case &H24 'WM_GETMINMAXINFO=&H24
Dim udtMINMAXINFO As MINMAXINFO
CopyMemory udtMINMAXINFO, ByVal lParam, 40&
With udtMINMAXINFO
.ptMaxSize.x = udtMMI.ptMaxSize.x
.ptMaxSize.y = udtMMI.ptMaxSize.y
.ptMaxPosition.x = 0
.ptMaxPosition.y = 0
.ptMaxTrackSize.x = .ptMaxSize.x
.ptMaxTrackSize.y = .ptMaxSize.y
.ptMinTrackSize.x = udtMMI.ptMinTrackSize.x
.ptMinTrackSize.y = udtMMI.ptMinTrackSize.y
Debug.Print .ptMaxSize.x & "," & .ptMaxSize.y
End With
CopyMemory ByVal lParam, udtMINMAXINFO, 40&
WindowProc = False
Exit Function
End Select
WindowProc = CallWindowProc(procOld, hWnd, iMsg, wParam, lParam)
End Function
Public Function LockWindow(hWnd As Long, Optional MinWidth As Long, Optional MinHeight As Long, Optional MaxWidth As Long, Optional MaxHeight As Long) As Boolean
With udtMMI
'指 定 窗 体 最 小 宽 度
If MinWidth = 0 Then .ptMinTrackSize.x = 0 Else .ptMinTrackSize.x = MinWidth
'指 定 窗 体 最 小 高 度
If MinHeight = 0 Then .ptMinTrackSize.y = 0 Else .ptMinTrackSize.y = MinHeight
'指 定 窗 体 最 大 宽 度
If MaxWidth = 0 Then .ptMaxSize.x = Screen.Width \ Screen.TwipsPerPixelX Else .ptMaxSize.x = MaxWidth
'指 定 窗 体 最 大 高 度
If MaxHeight = 0 Then .ptMaxSize.y = Screen.Width \ Screen.TwipsPerPixelX Else .ptMaxSize.y = MaxHeight
End With
procOld = SetWindowLong(hWnd, -4, AddressOf WindowProc)
End Function
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -