'窗体
Option Explicit
Private Sub Form_Load()
Me.Width = 400 * 15
Me.Height = 200 * 15
Call SubClass(Me.hwnd)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnSubClass(Me.hwnd)
End Sub'模块
Option Explicit
Public defWindowProc As Long
Public minX As Long
Public minY As Long
Public maxX As Long
Public maxY As LongPublic Const GWL_WNDPROC As Long = (-4)
Public Const WM_GETMINMAXINFO As Long = &H24Public Type POINTAPI
x As Long
y As Long
End TypeType MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End TypePublic 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 uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As LongPublic Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy 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 uMsg
Case WM_GETMINMAXINFO
Dim MMI As MINMAXINFO
CopyMemory MMI, ByVal lParam, LenB(MMI)
With MMI
.ptMinTrackSize.x = 400
.ptMinTrackSize.y = 200
.ptMaxTrackSize.x = 400
.ptMaxTrackSize.y = 200
End With
CopyMemory ByVal lParam, MMI, LenB(MMI)
WindowProc = 0
Case Else
WindowProc = CallWindowProc(defWindowProc, _
hwnd, _
uMsg, _
wParam, _
lParam)
End Select
End Function
Option Explicit
Private Sub Form_Load()
Me.Width = 400 * 15
Me.Height = 200 * 15
Call SubClass(Me.hwnd)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnSubClass(Me.hwnd)
End Sub'模块
Option Explicit
Public defWindowProc As Long
Public minX As Long
Public minY As Long
Public maxX As Long
Public maxY As LongPublic Const GWL_WNDPROC As Long = (-4)
Public Const WM_GETMINMAXINFO As Long = &H24Public Type POINTAPI
x As Long
y As Long
End TypeType MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End TypePublic 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 uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As LongPublic Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(hpvDest As Any, _
hpvSource As Any, _
ByVal cbCopy 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 uMsg
Case WM_GETMINMAXINFO
Dim MMI As MINMAXINFO
CopyMemory MMI, ByVal lParam, LenB(MMI)
With MMI
.ptMinTrackSize.x = 400
.ptMinTrackSize.y = 200
.ptMaxTrackSize.x = 400
.ptMaxTrackSize.y = 200
End With
CopyMemory ByVal lParam, MMI, LenB(MMI)
WindowProc = 0
Case Else
WindowProc = CallWindowProc(defWindowProc, _
hwnd, _
uMsg, _
wParam, _
lParam)
End Select
End Function
解决方案 »
- 使用如下方法导出到EXCEL以后,发现数字部分无法求和,整个EXCEL是文本,修改为常规也无法求和
- 自己的VB程序操作Excel时,打开磁盘上的其他Excel文件,这是程序出错?
- vb
- 使用VB能实现查看局域网中计算机正在运行的进程吗?
- 请问一个小问题
- vb+ado+mysql问题?
- 怎樣在Crystal report中動態加載圖片?
- 关于SaveFileDialog的问题
- excel导入access时怎样禁止重复数据导入
- 请教一个问题
- 请问什么叫B/S结构????? 谁可以详解释?????????????????
- 再贴!!!难道没有人告诉我???我想在局域网内用以下代码操作NT+SQL服务器一切正常,可是却不能连接WIN98+SQL桌面版的数据库,请问数据
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const GWL_STYLE = (-16)Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Const SC_MAXIMIZE = &HF030&Private Const MF_BYCOMMAND = &H0&Private Sub Form_Load()
Dim TempLng As Long
TempLng = GetWindowLong(Me.hWnd, GWL_STYLE)
'TempLng = TempLng And Not WS_MINIMIZEBOX '隐藏最小化
TempLng = TempLng And Not WS_MAXIMIZEBOX '禁用最大化
TempLng = TempLng And Not WS_THICKFRAME '禁用可改变大小的边框
SetWindowLong Me.hWnd, GWL_STYLE, TempLng
TempLng = GetSystemMenu(Me.hWnd, 0)
DeleteMenu TempLng, SC_MAXIMIZE, MF_BYCOMMAND
End Sub