实现平面工具栏
来源:互联网 发布:apache重启后解决 编辑:程序博客网 时间:2024/05/09 12:03
流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才会突起,这种效果采用贴图的方法实现十分麻烦,而利用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)
通过以上的几个步骤,平面的工具栏就实现了,现在我们来运行一下程序,看看鼠标移到工具栏上的效果吧。
为了学习方便,以下提供了源代码并附详细的中文注释:
-------------------------------------------
实现平面工具栏
-------------------------------------------
程序说明:
流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才
会突起,这种效果采用贴图的方法实现十分麻烦,而利用
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是该函数的“类型安全”声明形式
【返回值】
Long,由具体的消息决定
【参数表】
hwnd ----------- Long,要接收消息的那个窗口的句柄
wMsg ----------- Long,消息的标识符
wParam --------- Long,具体取决于消息
lParam --------- Any,具体取决于消息
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
设置工具栏为新的样式
Private Sub SetToolbar(tBar As Toolbar)
Dim lngResult As Long
Dim lngHWND As Long
Dim lngStyle As Long
得到Toolbar的句柄
lngHWND = FindWindowEx(tBar.hwnd, 0&, "ToolbarWindow32", vbNullString)
得到原有的Toolbar的样式
lngStyle = SendMessage(lngHWND, TB_GETSTYLE, 0&, 0&)
设置一个图形在上、文字在下的平面工具栏
lngStyle = lngStyle Or TBSTYLE_FLAT
用API函数实现工具栏的新样式
lngResult = SendMessage(lngHWND, TB_SETSTYLE, 0, lngStyle)
刷新工具栏
tBar.Refresh
End Sub
Private Sub exitfile_Click()
Unload Me
End Sub
Private Sub Form_Load()
调用函数改变工具栏
Call SetToolbar(Me.Toolbar1)
End Sub
我们先来声明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)
通过以上的几个步骤,平面的工具栏就实现了,现在我们来运行一下程序,看看鼠标移到工具栏上的效果吧。
为了学习方便,以下提供了源代码并附详细的中文注释:
-------------------------------------------
实现平面工具栏
-------------------------------------------
程序说明:
流行软件的工具栏上的按钮是平的按钮,当鼠标移过时才
会突起,这种效果采用贴图的方法实现十分麻烦,而利用
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是该函数的“类型安全”声明形式
【返回值】
Long,由具体的消息决定
【参数表】
hwnd ----------- Long,要接收消息的那个窗口的句柄
wMsg ----------- Long,消息的标识符
wParam --------- Long,具体取决于消息
lParam --------- Any,具体取决于消息
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
设置工具栏为新的样式
Private Sub SetToolbar(tBar As Toolbar)
Dim lngResult As Long
Dim lngHWND As Long
Dim lngStyle As Long
得到Toolbar的句柄
lngHWND = FindWindowEx(tBar.hwnd, 0&, "ToolbarWindow32", vbNullString)
得到原有的Toolbar的样式
lngStyle = SendMessage(lngHWND, TB_GETSTYLE, 0&, 0&)
设置一个图形在上、文字在下的平面工具栏
lngStyle = lngStyle Or TBSTYLE_FLAT
用API函数实现工具栏的新样式
lngResult = SendMessage(lngHWND, TB_SETSTYLE, 0, lngStyle)
刷新工具栏
tBar.Refresh
End Sub
Private Sub exitfile_Click()
Unload Me
End Sub
Private Sub Form_Load()
调用函数改变工具栏
Call SetToolbar(Me.Toolbar1)
End Sub
- 实现平面工具栏
- VC++实现工具栏上添加平面组合框控件
- 工具栏上添加平面下拉控件
- 建立不透明平面风格的工具栏
- 如何在工具栏上添加平面下拉控件
- js实现滚动工具栏
- 工具栏的自绘实现
- 真彩工具栏的实现
- 苹果工具栏DOCK实现算法
- wxPython:工具栏、状态栏、菜单实现
- SWT工具栏菜单的实现
- SDK实现真彩工具栏
- 简单实现Android底部工具栏
- MFC工具栏实现多种方法
- Qt实现菜单栏,工具栏,状态栏
- Qt实现菜单栏,工具栏,状态栏
- unity3D 代码实现自定义平面
- 简单实现Android顶部工具栏和底部工具栏
- 郁闷的华硕A3H,郁闷的声卡
- 放弃
- C#中需要了解的常用模板
- 第一、JAVA语言语法之 三、static修饰符 四、final修饰符 五、接口 六、内类
- 为何要进行白盒测试
- 实现平面工具栏
- Java的多进程运行模式
- 股票,撩人心房
- 多媒体课堂新年大礼:Rational 最佳实践集锦
- windows media player 控件的常用属性及方法
- xenocode使用说明
- 使Shell指令具Wait功能
- 用hbm2java生成Hibernate类
- 第一、JAVA语言语法之 七、异常——Exception