'Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'Private Const HWND_TOP = 0
'Private Const SWP_NOMOVE = &H2
'Private Const SWP_NOSIZE = &H1
'
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, byVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000setWindowLong hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Xor _
(WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
GetSystemMenu Me.hwnd, 1&
SetWindowLong Me.hwnd, GWL_STYLE, MY_DIALOG
SetWindowPos Me.hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE上法对普通窗体完全有效,但是如果是MDI的话,无法屏蔽双击标题栏
'Private Const HWND_TOP = 0
'Private Const SWP_NOMOVE = &H2
'Private Const SWP_NOSIZE = &H1
'
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, byVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000setWindowLong hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Xor _
(WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
GetSystemMenu Me.hwnd, 1&
SetWindowLong Me.hwnd, GWL_STYLE, MY_DIALOG
SetWindowPos Me.hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE上法对普通窗体完全有效,但是如果是MDI的话,无法屏蔽双击标题栏
Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPublic Const MF_REMOVE = &H1000&
Public Const SC_MAXIMIZE = &HF030
Public Const SC_SIZE = &HF000&Private Sub MDIForm_Load()
RemoveMenu GetSystemMenu(Me.hWnd, 0), SC_MAXIMIZE, MF_REMOVE
RemoveMenu GetSystemMenu(Me.hWnd, 0), SC_SIZE, MF_REMOVE
End Sub
Form.BorderStyle=2
Form.MinBox=True
Form.MinBox=True
DeflexionMessage Me.Hwnd
End Sub在Module1Option Explicit
'定义常数
Public Const GWL_STYLE = (-16)
Public Const GWL_WNDPROC = (-4)
'定义变量
Public PrevWndproc As Long
'声明API函数
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 Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const WM_SYSCOMMAND = &H112
Const SC_MAXIMIZE = &HF030&
'-----------------------偏转消息
Function DeflexionMessage(Hwnd As Long)
'从指定窗口的结构中取得信息
PrevWndproc = GetWindowLong(Hwnd, GWL_WNDPROC)
'使用AddressOf函数将窗体消息转向wndproc模块
SetWindowLong Hwnd, GWL_WNDPROC, AddressOf wndproc
End Function
'-------------------------------'-----------------------截获消息模块
Function wndproc(ByVal Hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongIf Msg = WM_SYSCOMMAND Then Debug.Print wParamSelect Case Msg
Case WM_SYSCOMMAND
Select Case wParam
Case 61490
Debug.Print "MouseDdoubleClick"
wndproc = 0
Exit Function
End Select
End Select'将消息返还给原进程
wndproc = CallWindowProc(PrevWndproc, Hwnd, Msg, wParam, lParam)
End Function
春天不是读书天
夏日炎炎正好眠
秋高气爽踢球去
卖了书本好过年 :D
-------------------------------
海纳百川,有容乃大;
壁立千仞,无欲则刚。