如何限制窗体的最大改变量
来源:互联网 发布:ubuntu软件源更新失败 编辑:程序博客网 时间:2024/05/21 17:36
限制Form Resize的最大值
来源:cww
当Form的Position更动或大小改变时,会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
- 如何限制窗体的最大改变量
- 如何限制表单textarea的文字输入量
- Linux 如何限制用户的磁盘使用量 -- quota
- IE的URL的最大长度限制和如何解决URL最大长度的限制
- 如何改变对话或窗体视窗的背景颜色
- C#的WinForm中如何让窗体大小不能改变
- 如何改变VB窗体的大小时控件随之变化
- 如何阻止用户移动窗体或改变它的大小
- vc6.0 如何在一个窗体中改变另一个窗体下的按钮状态
- C#开发WinForm窗体程序时,如何禁止用户改变程序窗体的大小?
- 3.13如何限制 视图的 最大 或 最小 尺寸?
- winform中,如何控制控件位置随窗体的大小改变而改变
- winform中,如何控制控件位置随窗体的大小改变而改变
- 如何实现控件随窗体大小的改变而自动适应其改变
- 如何实现控件随窗体大小的改变而自动适应其改变
- select的套接字数量的限制
- VB改变窗体的透明度
- 改变颜色的Windows窗体
- linux进程间通信之消息队列
- CSS实现frameset
- linux下抓数据包
- 爱立信工资标准
- Could not obtain connection metadata
- 如何限制窗体的最大改变量
- junit4
- linux进程间通信之共享内存
- SQL分组排序
- 风险投资
- JAX-WS2.0入门实例
- 挑战自我,勇攀高峰
- Flex RPC错误小结
- ThreadLocal模式的分页pager-taglib