我在消息拦截后的处理涵数里这么写到 Public Function FrmMsg(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case uMsg Case WM_NCLBUTTONDBLCLK Case WM_MOVING Case Else FrmMsg = CallWindowProc(OldFrmProc, hwnd, uMsg, wParam, lParam) End Select End Function 大家可以看到我拦截了双击动作和移动动作,让它什么都不做,请问这样会有什么问题吗? 另外WM_MOVING的值是多少,到哪能查到??
to:vcbug 这是我在写Skins控件时的消息处理代码,希望对你有所帮助: Friend Function MessageProc(ByVal hWnd As Long, ByVal Message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim rcResult As RECT
'如果窗体处于最大化状态则不允许改变大小(保持窗体原来的外围矩形) If frmBody.WindowState = vbMaximized Then CopyRect rcResult, rcWnd OffsetRect rcResult, -lngFrameWidth, -lngFrameHeight Else '限制矩形的最小宽度 With rcResult If (wParam = WMSZ_LEFT) Or (wParam = WMSZ_TOPLEFT) Or (wParam = WMSZ_BOTTOMLEFT) Then If .Right - .Left < lngCaptionMinWidth Then .Left = .Right - lngCaptionMinWidth Else If .Right - .Left < lngCaptionMinWidth Then .Right = .Left + lngCaptionMinWidth End If End With End If
Me.WindowState = 2
End Sub
然后自己画一个TitleBar
http://expert.csdn.net/Expert/topic/1490/1490576.xml?temp=.567898这是截获最大化消息,你把它改成截获 窗口化 消息,然后移除该消息就行
BorderStyle=2 时窗口最大化一样。但是,除了 BorderStyle=2 时以外,所有的(当然BorderStyle=0除外,没有标题栏供你拖动。)其它类型的窗体,即使你设置了windowstate = 2,运行时的窗体也只是铺满屏幕可用区域,并不是最大化,窗体照样可以拖得满天飞。要实现象你说的效果,正如wxy_xiaoyu(☆然也☆╭∩╮(︶︿︶)╭∩╮) ( 所说,得你自己去处理相应的消息。顺便说一句:大小的改变处理"WM_SIZING"消息,位置的改变处理"WM_MOVING"如果需要,我可以给你例子,祝你顺利~!
Public Function FrmMsg(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_NCLBUTTONDBLCLK
Case WM_MOVING
Case Else
FrmMsg = CallWindowProc(OldFrmProc, hwnd, uMsg, wParam, lParam)
End Select
End Function
大家可以看到我拦截了双击动作和移动动作,让它什么都不做,请问这样会有什么问题吗?
另外WM_MOVING的值是多少,到哪能查到??
我试了很多消息都不行啊,有谁知道怎么不让窗口移动吗?
这是我在写Skins控件时的消息处理代码,希望对你有所帮助:
Friend Function MessageProc(ByVal hWnd As Long, ByVal Message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim rcResult As RECT
Select Case Message
Case WM_SIZING '窗体改变尺寸中
'从内存中拷贝窗体外围矩形
CopyMemory rcResult, ByVal lParam, Len(rcResult)
'如果窗体处于最大化状态则不允许改变大小(保持窗体原来的外围矩形)
If frmBody.WindowState = vbMaximized Then
CopyRect rcResult, rcWnd
OffsetRect rcResult, -lngFrameWidth, -lngFrameHeight
Else
'限制矩形的最小宽度
With rcResult
If (wParam = WMSZ_LEFT) Or (wParam = WMSZ_TOPLEFT) Or (wParam = WMSZ_BOTTOMLEFT) Then
If .Right - .Left < lngCaptionMinWidth Then .Left = .Right - lngCaptionMinWidth
Else
If .Right - .Left < lngCaptionMinWidth Then .Right = .Left + lngCaptionMinWidth
End If
End With
End If
'将结果矩形返回
CopyMemory ByVal lParam, rcResult, Len(rcResult)
MessageProc = True
Case WM_MOVING '窗体移动中
'从内存中拷贝窗体外围矩形
CopyMemory rcResult, ByVal lParam, Len(rcResult)
'如果窗体处于最大化状态则不允许移动(保持窗体原来的外围矩形)
If frmBody.WindowState = vbMaximized Then
CopyRect rcResult, rcWnd
OffsetRect rcResult, -lngFrameWidth, -lngFrameHeight
End If
'将结果矩形返回
CopyMemory ByVal lParam, rcResult, Len(rcResult)
MessageProc = True如果你还有不清楚的地方,可以再问我.再次对我造成的延误表示歉意,Sorry~!