最简单的设置窗体的borderstyle为1,如果你想保留最小化按钮,那么可用下面的代码: 模块中 Public defWindowProc As Long Public minX As Long Public minY As Long Public maxX As Long Public maxY As Long Public Const GWL_WNDPROC As Long = (-4) Public Const WM_GETMINMAXINFO As Long = &H24 Public 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Sub SubClass(hWnd As Long) On Error Resume Next defWindowProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnSubClass(hWnd As Long) If defWindowProc Then SetWindowLong hWnd, GWL_WNDPROC, defWindowProc defWindowProc = 0 End If End Sub Public Function WindowProc(ByVal hWnd As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long On Error Resume Next Select Case hWnd Case frmmain.hWnd Select Case uMsg Case WM_GETMINMAXINFO Dim MMI As MINMAXINFO CopyMemory MMI, ByVal lParam, LenB(MMI) With MMI .ptMinTrackSize.x = minX .ptMinTrackSize.y = minY .ptMaxTrackSize.x = maxX .ptMaxTrackSize.y = maxY End With CopyMemory ByVal lParam, MMI, LenB(MMI) WindowProc = 0
Case Else WindowProc = CallWindowProc(defWindowProc, hWnd, uMsg, wParam, lParam) End Select End Select End Function 窗体中 Option Explicit Private StartupHeight As Long Private StartupWidth As Long Private TwipsX As Integer Private TwipsY As Integer Private Sub Form_Load() TwipsX = Screen.TwipsPerPixelX TwipsY = Screen.TwipsPerPixelY StartupWidth = Me.Width \ TwipsX StartupHeight = Me.Height \ TwipsY Call SubClass(frmmain.hWnd) minX = Me.Width \ TwipsX minY = Me.Height \ TwipsY maxX = Me.Width \ TwipsX maxY = Me.Height \ TwipsY End Sub Private Sub Form_Unload(Cancel As Integer) Call UnSubClass(Me.hWnd) End Sub
Dim WidthX As Long, HeightX As LongPrivate Sub Form_Load() WidthX = Me.Width HeightX = Me.Height End SubPrivate Sub Form_Resize() Me.Width = WidthX Me.Height = HeightX End Sub 呵呵,这是一个....土方法,也是行的另外,窗体可以设置....不允许改变大小的属性
模块中
Public defWindowProc As Long
Public minX As Long
Public minY As Long
Public maxX As Long
Public maxY As Long
Public Const GWL_WNDPROC As Long = (-4)
Public Const WM_GETMINMAXINFO As Long = &H24
Public 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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 Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Sub SubClass(hWnd As Long)
On Error Resume Next
defWindowProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnSubClass(hWnd As Long)
If defWindowProc Then
SetWindowLong hWnd, GWL_WNDPROC, defWindowProc
defWindowProc = 0
End If
End Sub
Public Function WindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long On Error Resume Next
Select Case hWnd
Case frmmain.hWnd
Select Case uMsg
Case WM_GETMINMAXINFO
Dim MMI As MINMAXINFO
CopyMemory MMI, ByVal lParam, LenB(MMI)
With MMI
.ptMinTrackSize.x = minX
.ptMinTrackSize.y = minY
.ptMaxTrackSize.x = maxX
.ptMaxTrackSize.y = maxY
End With
CopyMemory ByVal lParam, MMI, LenB(MMI)
WindowProc = 0
Case Else
WindowProc = CallWindowProc(defWindowProc, hWnd, uMsg, wParam, lParam)
End Select
End Select
End Function
窗体中
Option Explicit
Private StartupHeight As Long
Private StartupWidth As Long
Private TwipsX As Integer
Private TwipsY As Integer
Private Sub Form_Load()
TwipsX = Screen.TwipsPerPixelX
TwipsY = Screen.TwipsPerPixelY
StartupWidth = Me.Width \ TwipsX
StartupHeight = Me.Height \ TwipsY
Call SubClass(frmmain.hWnd)
minX = Me.Width \ TwipsX
minY = Me.Height \ TwipsY
maxX = Me.Width \ TwipsX
maxY = Me.Height \ TwipsY
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnSubClass(Me.hWnd)
End Sub
WidthX = Me.Width
HeightX = Me.Height
End SubPrivate Sub Form_Resize()
Me.Width = WidthX
Me.Height = HeightX
End Sub
呵呵,这是一个....土方法,也是行的另外,窗体可以设置....不允许改变大小的属性