实现平面工具栏
2008-04-09 04:42:35来源:互联网 阅读 ()
我们先来声明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)
lngStyle = SendMessage(lngHWND, TB_GETSTYLE, 0&, 0&)
最后发送TB_SETSTYLE消息给Toolbar,设置新的样式:
lngStyle = lngStyle Or TBSTYLE_FLAT 设置工具栏的新样式
用API函数实现工具栏的新样式
lngResult = SendMessage(lngHWND, TB_SETSTYLE, 0, lngStyle)
通过以上的几个步骤,平面的工具栏就实现了,现在我们来运行一下程序,看看鼠标移到工具栏上的效果吧。
为了学习方便,以下提供了源代码并附详细的中文注释:
-------------------------------------------
实现平面工具栏
-------------------------------------------
程序说明:
流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才
会突起,这种效果采用贴图的方法实现十分麻烦,而利用
API函数实现起来就很方便,快捷。
实现的基本思路是:用SendMessage函数向工具栏发送设
置显示风格STYLE的消息来改变工具栏的显示效果。
Const WM_USER = &H400
Const TB_SETSTYLE = WM_USER 56
Const TB_GETSTYLE = WM_USER 57
Const TBSTYLE_FLAT = &H800
Const TBSTYLE_LIST = &H1000
【VB声明】
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
【说明】
在窗口列表中寻找与指定条件相符的第一个子窗口
【返回值】
Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError
hWnd1 ---------- Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)
hWnd2 ---------- Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索
lpsz1 ---------- String,欲搜索的类名。零表示忽略
lpsz2 ---------- String,欲搜索的类名。零表示忽略
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
【VB声明】
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
【说明】
调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum,
SendMessageByString是该函数的“类型安全”声明形式
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:使用超链接和发送Email
下一篇:闪烁的标题栏
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash