实现平面工具栏 |
||||||||||||||||
流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才会突起,这种效果采用贴图的方法实现十分麻烦,而利用API函数实现起来就很方便,快捷。实现的基本思路是:用SendMessage函数向工具栏发送设置显示样式TB_SETSTYLE的消息来改变工具栏的显示效果。 我们先来声明API函数,本例中用到的两个函数声明如下:
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控件(是一个窗口,这里所说的窗口包括窗体、按钮、标签等各种控件)的窗口句柄,使用语法如下:
然后利用取得的句柄发送TB_GETSTYLE消息给Toolbar,此时程序中的lngStyle返回原有的Toolbar的样式。
最后发送TB_SETSTYLE消息给Toolbar,设置新的样式: lngStyle = lngStyle Or TBSTYLE_FLAT 设置工具栏的新样式 用API函数实现工具栏的新样式
通过以上的几个步骤,平面的工具栏就实现了,现在我们来运行一下程序,看看鼠标移到工具栏上的效果吧。 为了学习方便,以下提供了源代码并附详细的中文注释: ------------------------------------------- 实现平面工具栏 ------------------------------------------- 程序说明: 流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才 会突起,这种效果采用贴图的方法实现十分麻烦,而利用 API函数实现起来就很方便,快捷。 实现的基本思路是:用SendMessage函数向工具栏发送设 置显示风格STYLE的消息来改变工具栏的显示效果。
【VB声明】
【说明】 在窗口列表中寻找与指定条件相符的第一个子窗口 【返回值】 Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError 【参数表】 hWnd1 ---------- Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找) hWnd2 ---------- Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索 lpsz1 ---------- String,欲搜索的类名。零表示忽略 lpsz2 ---------- String,欲搜索的类名。零表示忽略
【VB声明】
【说明】 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum, SendMessageByString是该函数的“类型安全”声明形式 【返回值】 Long,由具体的消息决定 【参数表】 hwnd ----------- Long,要接收消息的那个窗口的句柄 wMsg ----------- Long,消息的标识符 wParam --------- Long,具体取决于消息 lParam --------- Any,具体取决于消息
设置工具栏为新的样式
得到Toolbar的句柄
得到原有的Toolbar的样式
设置一个图形在上、文字在下的平面工具栏
用API函数实现工具栏的新样式
刷新工具栏
调用函数改变工具栏
|