各位高手好,如题,
最常见的方法是
在 resize事件中,加入
if me.width < 3000 then me.width = 3000可是这样写的在改变窗体大小的时候,窗体总在闪,
有没有别的方法 比较正规的。
比如鼠标拖到最小的范围后,鼠标本身就不能再往小的方向移动了。
或有其它什么好的方法谢谢
最常见的方法是
在 resize事件中,加入
if me.width < 3000 then me.width = 3000可是这样写的在改变窗体大小的时候,窗体总在闪,
有没有别的方法 比较正规的。
比如鼠标拖到最小的范围后,鼠标本身就不能再往小的方向移动了。
或有其它什么好的方法谢谢
解决方案 »
- 新版QQ宠物修改了 api 函数 OpenProcess,总是会把已经结束的进程返回一个有效值,怎么改回去
- 请问高手:如何编写在显示的表格中选多条记录的程序?
- 【菜鸟问题】利用VB如何开发向导式的应用程序【在线登】
- 请问应该用哪一个API函数才可以使得任务栏上不会显示正在运行的程序?
- rs1.CursorLocation = adUseClient 和 rs1.CursorLocation = adUseServer的区别
- 请问: 如何通过上下箭头键在表单中的控件之间移动, 谢谢!!
- RAS撥號后如何通過API取得動態的IP?
- TextBox中,如何使得输入的字符中不能有空格,而且只能为16进制数
- 急死了,谁能帮我讲解下这段代码的意思
- 难道是颜色的问题??????????急!!!!!!!!!!!
- VB成生的XML如何加换行!
- 可以用VB创建服务程序吗?
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPublic 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 LongPublic Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic 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 = &H24Public Type POINTAPI
x As Long
y As Long
End TypePublic 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)
wndproc = DefWindowProc(hwnd, Msg, wParam, lParam)
Else
'将之送往原来的Window Procedure
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End If
End Function
--------------------------------------------------------------------------------
'以下在Form
Private 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