16,554
社区成员
发帖
与我相关
我的任务
分享
Public Structure RECT
Dim Left As Long
Dim top As Long
Dim right As Long
Dim bottom As Long
End Structure
Public FormActivateValue As Integer = 0
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000 ' WS_BORDER 或 WS_DLGFRAME
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000
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
Public Enum ESetWindowPosStyles
SWP_SHOWWINDOW = &H40
SWP_HIDEWINDOW = &H80
SWP_FRAMECHANGED = &H20 ' The frame changed: send WM_NCCALCSIZE
SWP_NOACTIVATE = &H10
SWP_NOCOPYBITS = &H100
SWP_NOMOVE = &H2
SWP_NOOWNERZORDER = &H200 ' Don't do owner Z ordering
SWP_NOREDRAW = &H8
SWP_NOREPOSITION = SWP_NOOWNERZORDER
SWP_NOSIZE = &H1
SWP_NOZORDER = &H4
SWP_DRAWFRAME = SWP_FRAMECHANGED
HWND_NOTOPMOST = -2
End Enum
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, ByVal lpRect As RECT) As Long
Private Function ShowTitleBar(ByVal bState As Boolean)
Dim lStyle As Long
Dim tR As RECT
' 获取窗口的位置:
GetWindowRect(Me.Handle.ToInt32, tR)
' 调整标题栏是否可见:
lStyle = GetWindowLong(Me.Handle.ToInt32, GWL_STYLE)
If (bState) Then
Me.Text = Me.Tag
If Me.ControlBox Then
lStyle = lStyle Or WS_SYSMENU
End If
If Me.MaximizeBox Then
lStyle = lStyle Or WS_MAXIMIZEBOX
End If
If Me.MinimizeBox Then
lStyle = lStyle Or WS_MINIMIZEBOX
End If
If Me.Text <> "" Then
lStyle = lStyle Or WS_CAPTION
End If
Else
Me.Tag = Me.Text
Me.Text = ""
lStyle = lStyle And Not WS_SYSMENU
lStyle = lStyle And Not WS_MAXIMIZEBOX
lStyle = lStyle And Not WS_MINIMIZEBOX
lStyle = lStyle And Not WS_CAPTION
End If
SetWindowLong(Me.Handle.ToInt32, GWL_STYLE, lStyle)
' 重新设定窗口:
SetWindowPos(Me.Handle.ToInt32, 0, tR.Left, tR.top, tR.right - tR.Left, tR.bottom - tR.top, &H200 Or &H4 Or &H20)
Me.Refresh()
' 你可能需要在Form_Resize中加一点代码,因为客户区的大小已经改变:
'Form_Resize
End Function