流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才会突起,这种效果采用贴图的方法实现十分麻烦,而利用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)
通过以上的几个步骤,平面的工具栏就实现了,现在我们来运行一下程序,看看鼠标移到工具栏上的效果吧。
|