专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »VB教程 » formresize:限制Form Resize的最大值 »正文

formresize:限制Form Resize的最大值

来源: 发布时间:星期四, 2009年1月15日 浏览:18次 评论:0
  当FormPosition更动或大小改变时会Send WM_GETMINMAXINFO讯息当我们取得这个讯息时可以更动该讯息内定Windows Resize不过本人目前只有测出如何限定其最大Size而最小Size目前没有测出来知道可者告诉我

  Option Explicit
'以下程式在module1.bas
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
 (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
 (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
 (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
  ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
  lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Public Const GWL_WNDPROC = (-4)
Public Const WM_GETMINMAXINFO = &H24
Type POINTAPI
    x As Long
    y As Long
End Type
Type MINMAXINFO
    ptReserved As POINTAPI
    ptMaxSize As POINTAPI
    ptMaxPosition As POINTAPI
    ptMinTrackSize As POINTAPI
    ptMaxTrackSize As POINTAPI
End Type
Public preWinProc As Long
Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
             ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lwd As Long, hwd As Long
If Msg = WM_GETMINMAXINFO Then
   Dim maxmin As MINMAXINFO
   CopyMemory maxmin, ByVal lParam, Len(maxmin)
   maxmin.ptMaxTrackSize.x = 500 '设定最大Resize宽度
   maxmin.ptMaxTrackSize.y = 400 '设定最大Resize高度
   'maxmin.ptMinTrackSize.x = 300 '设定最大小Resize宽度
   'maxmin.ptMinTrackSize.y = 300 '设定最大小Resize高度
   CopyMemory ByVal lParam, maxmin, Len(maxmin)
End If
'将的送往原来Window Procedure
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function


'以下在Form
Sub Form_Load
Dim ret As Long
'记录原本Window Procedure位址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
'取消Message截取而使的又只送往原来Window Procedure
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
End Sub


0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: