软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

当前位置: 第八基地首页 > asp.net > vb.net >
在运行时显示或隐藏窗体的标题栏
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2016-04-25 点击:250
这则代码告诉你如何在运行时显示或隐藏窗体的标题栏。要使一个窗口的标题栏消失,你必须去掉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时,窗体的标题栏将会在隐藏或显示之间切换。

对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈