您的位置:寻梦网首页编程乐园VB 编程API 专 区>API实例解析·实现平面工具栏
VB 编程乐园

API实例解析

API实例解析·实现平面工具栏

  流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才会突起,这种效果采用贴图的方法实现十分麻烦,而利用API函数实现起来就很方便,快捷。实现的基本思路是:用SendMessage函数向工具栏发送设置显示样式TB_SETSTYLE的消息来改变工具栏的显示效果。

  为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:


  我们先来声明API函数,本例中用到的两个函数声明如下:
   Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long

   Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Integer, ByVal lParam As Any) As Long

  FindWindowEx函数的作用是在窗口列表中寻找与指定条件相符的第一个子窗口,它返回的值是找到的窗口的句柄,其中各个参数的意义如下表所示:

参数
意义
hWnd1 Long,查找子窗口的父窗口。如设为零,表示使用桌面窗口(一般认为它是顶级父窗口)
hWnd2 Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件者
lpsz1 String,欲搜索的类名。零表示忽略
lpsz2 String,欲搜索的类名。零表示忽略
返回值 Long,找到的窗口的句柄。如未找到相符窗口,则返回零。

  SendMessage函数用于向某一窗口发送消息,它的各个参数的意义如下:

参数
意义
hwnd Long,要接收消息的那个窗口的句柄
wMsg Long,消息的标识符,改变工具栏样式的标识为TB_SETSTYLE,它的值为 &H400 + 56
wParam Long,具体取决于消息
lParam String,与消息有关,平面工具栏是TBSTYLE_FLAT,它的值是&H800
返回值 Long,找到的窗口的句柄。如未找到相符窗口,则返回零。

  我们先利用FindWindowEx函数取得Toolbar控件(是一个窗口,这里所说的窗口包括窗体、按钮、标签等各种控件)的窗口句柄,使用语法如下:
   lngHWND = FindWindowEx(tBar.hwnd, 0&, "ToolbarWindow32", vbNullString)

  然后利用取得的句柄发送TB_GETSTYLE消息给Toolbar,此时程序中的lngStyle返回原有的Toolbar的样式。
   lngStyle = SendMessage(lngHWND, TB_GETSTYLE, 0&, 0&)

  最后发送TB_SETSTYLE消息给Toolbar,设置新的样式:
   lngStyle = lngStyle Or TBSTYLE_FLAT    '设置工具栏的新样式
                        '用API函数实现工具栏的新样式
   lngResult = SendMessage(lngHWND, TB_SETSTYLE, 0, lngStyle)

  通过以上的几个步骤,平面的工具栏就实现了,现在我们来运行一下程序,看看鼠标移到工具栏上的效果吧。