怎样在运行时显示(或隐藏)窗体的标题栏

 我来答
百度网友ded4135
高粉答主

2018-02-20 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.7万
采纳率:87%
帮助的人:1.2亿
展开全部
新建一个项目,把以下代码写入窗体:

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

Private 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, lpRect As RECT) As Long

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Private Function ShowTitleBar(ByVal bState As Boolean)

Dim lStyle As Long

Dim tR As RECT

' 获取窗口的位置:

GetWindowRect Me.hwnd, tR

' 调整标题栏是否可见:

lStyle = GetWindowLong(Me.hwnd, GWL_STYLE)

If (bState) Then

Me.Caption = Me.Tag

If Me.ControlBox Then

lStyle = lStyle Or WS_SYSMENU

End If

If Me.MaxButton Then

lStyle = lStyle Or WS_MAXIMIZEBOX

End If

If Me.MinButton Then

lStyle = lStyle Or WS_MINIMIZEBOX

End If

If Me.Caption <> "" Then

lStyle = lStyle Or WS_CAPTION

End If

Else

Me.Tag = Me.Caption

Me.Caption = ""

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.hwnd, GWL_STYLE, lStyle

' 重新设定窗口:

SetWindowPos Me.hwnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED

Me.Refresh

' 你可能需要在Form_Resize中加一点代码,因为客户区的大小已经改变:

'Form_Resize

End Function

为了试验一下代码,在窗体上放一个CheckBox,将它的Value属性设为1 (Checked)。然后写入以下代码:

Private Sub Check1_Click()

If (Check1.Value = Checked) Then

ShowTitleBar True

Else

ShowTitleBar False

End If

End Sub

运行,当你点击这个CheckBox时,窗体的标题栏将会在隐藏或显示之间切换。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式