怎样控制VB窗体的大小

XTQ 2004-03-23 08:21:03
我想让VB窗体小到一定程度(或大到一定程度)就不在改变窗体的大小
Private Sub Form_Resize()
If Me.Width <= 500 * 15 Then Me.Width = 500 * 15
If Me.Height <= 500 * 15 Then Me.Height = 500 * 15
End Sub
用上面的做法可以做到,但是当窗体的高或宽等于500*15的时候,在缩小窗体会看到闪耀的。还有什么好办法可以得到这样的效果吗?等待高人的指点!多谢!!
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingscv 2004-03-23
  • 打赏
  • 举报
回复
form_load 吧
pigpag 2004-03-23
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2832/2832408.xml?temp=.8711664
XTQ 2004-03-23
  • 打赏
  • 举报
回复
多谢两位高人指点!:)
szyhy810518 2004-03-23
  • 打赏
  • 举报
回复
窗口中:这个是什么事件啊

'w = 200: h = 100
OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
victorycyz 2004-03-23
  • 打赏
  • 举报
回复

来个简单一点的:

Private Sub Form_Resize()

If Width > 5000 Then Width = 5000: Enabled = False
Enabled = True

End Sub
czw1975 2004-03-23
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2832/2832408.xml?temp=.8711664
射天狼 2004-03-23
  • 打赏
  • 举报
回复
窗口的大小限制在模块中,你自己改吧!!
射天狼 2004-03-23
  • 打赏
  • 举报
回复
可以用子类处理,方法如下:

模块中:

Option Explicit

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen 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

Public Const GWL_WNDPROC = (-4)
Public Const WM_GETMINMAXINFO = &H24
Public OldWindowProc As Long

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 Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
If Msg = WM_GETMINMAXINFO Then
Dim MinMax As MINMAXINFO

CopyMemory MinMax, ByVal lp, Len(MinMax)

MinMax.ptMinTrackSize.x = 300
MinMax.ptMinTrackSize.y = 200

MinMax.ptMaxTrackSize.x = 640
MinMax.ptMaxTrackSize.y = 480

CopyMemory ByVal lp, MinMax, Len(MinMax)

WndProc = 1
Exit Function
End If
WndProc = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
End Function

窗口中:

'w = 200: h = 100
OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, OldWindowProc)
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧