在运行期间启动和关闭窗体的标题栏

ZDNet软件频道 时间:2004-03-23 作者:Builder.com |  我要评论()
本文关键词:vbtips
允许用户启动或者关闭窗体的标题栏是一个相当好的程序特性。然而,相关的窗体性质——BorderStyle,在运行期间是只读的。这就意味着你必须要改用Windows API才能够获得此项功能。
本文译自Builder.com,未经许可请勿转载

允许用户启动或者关闭窗体的标题栏是一个相当好的程序特性。然而,相关的窗体性质——BorderStyle,在运行期间是只读的。这就意味着你必须要改用Windows API才能够获得此项功能。

每一个Windows窗体都有一系列样式位(style bit),用来控制其外观和行为的各个方面。标题栏位(caption bit)会控制标题栏的显示,通过设置或者清除这个位,你可以启动或者关闭标题栏的显示。其原理如下:

  1. 取回窗口的样式位。
  2. 按照需要设置或者清除标题栏位。
  3. 把修改过的样式位重新写回到窗口。
  4. 重新绘制窗口,以新的样式显示。

你将需要用到三个API函数来完成这个任务;它们的声明如下。(请把这些声明放到你的项目的代码模块里。)

Public Declare Function GetWindowLong Lib "user32" Alias _
  "GetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias _
  "SetWindowLongA" (ByVal hwnd As Long, _
  ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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

你要使用GetWindowLong来取回窗口的样式位,使用SetWindowLong把修改过的(样式)位写回到窗口,使用SetWindowPos重新绘制窗口。你还需要下面的常量声明(它们也需要放在同样的代码模块里):

Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOSIZE = &H1

最后一个元素是下面列出来的函数。你把一个参照传递给窗口,同时传递一个标志,用来指示是显示还是隐藏标题栏:

Public Sub ToggleTitleBar(f As Form, ShowTitle As Boolean)

Dim style As Long

' Get window's current style bits.
style = GetWindowLong(f.hwnd, GWL_STYLE)

' Set the style bit for the title on or off.
If ShowTitle Then
    style = style Or WS_CAPTION
Else
    style = style And Not WS_CAPTION
End If

' Send the new style to the window.
SetWindowLong f.hwnd, GWL_STYLE, style

' Repaint the window.
SetWindowPos f.hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or _
  SWP_NOMOVE Or SWP_NOZORDER Or SWP_NOSIZE

End Sub

有了这些代码,程序就能够为其任何窗口设置标题栏的显示状态。例如,当命令(Command)按钮被点击的时候,下面的代码就会关闭窗体的标题栏:

Private Sub Command1_Click()

  ToggleTitleBar Me, False

End Sub


本文作者: 自从Visual Basic 1.0版以来,Peter Aitken就一直使用VB编程。他已经编写过很多关于VisualBasic以及其他计算机和编程的书以及杂志文章了。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134