繁体中文
设为首页
加入收藏
当前位置:程序开发首页 >> Visual Basic >> 在运行时显示或隐藏窗体的标题栏

在运行时显示或隐藏窗体的标题栏

2005-01-09 20:42:24  作者:wxj_lake  来源:互联网  浏览次数:30  文字大小:【】【】【
简介:这则代码告诉你如何在运行时显示或隐藏窗体的标题栏。要使一个窗口的标题栏消失,你必须去掉control box、最大化按钮和最小化按钮,并且将caption设为空。不幸的是,VB中窗体的ControlBox、MinButton和MaxButton...
关键字:时显 窗体 运行 标题

这则代码告诉你如何在运行时显示或隐藏窗体的标题栏。要使一个窗口的标题栏消失,你必须去掉control box、最大化按钮和最小化按钮,并且将caption设为空。不幸的是,VB中窗体的ControlBox、MinButton和MaxButton属性在运行期是只读的,因此,你只能在设计时做这些事。其实,只要能熟练操作关于窗口式样的API,你同样能在运行时办到这一点。

  新建一个项目,把以下代码写入窗体:

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时,窗体的标题栏将会在隐藏或显示之间切换。

责任编辑:admin
相关文章