编号:QA000029
建立日期: 1998年10月1日 最后修改日期:2000年10月15日
所属类别:
张立斌:
时下流行的那种按钮(平时是平面,鼠标移上去后突起,按下去是凹陷状,移开后又成为平面)在VB5中是如何实现的?
回答:
如果你想要在单独的按钮上实现这种效果,可以使用微软提供的一个叫Soft Button的例子,你可以从http://msdn.microsoft.com/vbasic/downloads/samples.asp免费下载,也可以下载SoftBttn.exe。安装这个例子之后你可以将其编译成ocx,然后在自己的程序中使用。这个例子提供了完整的源程序,你可以详细地研究其工作原理。你也可以下载类似的免费控件FlashButtonv2.zip。
如果你想使自己的工具条也变成这种风格,可以从微软的站点上下载免费的控件CoolBar,下载地址是:http://premium.microsoft.com/vbasic/updates/coolbar.asp。(这个控件也包括在VB6中)如果你还没有在微软的站点上注册过,你需要先按照主页上的说明进行免费注册(需要提供合法的VB系列号)。这个控件虽然存在一些缺陷,但总体感觉还可以,它不但支持凹陷/平面效果,还支持船坞式(dockable)效果,也就是允许最终用户调整工具条的布局。如果你只想要凹陷/平面效果,而不需要船坞式效果,那么只要你的Win95系统中的Comctl32.dll的版本号高于4.70,再加上几行简单的VB代码就够了。
首先建立一个模块(.BAS),输入以下代码:
Public Const WM_USER = &H400
Public Const TB_SETSTYLE = WM_USER + 56
Public Const TB_GETSTYLE = WM_USER + 57
Public Const TBSTYLE_FLAT = &H800
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public 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
然后在窗体中输入以下代码(这里假定你的工具条叫做Toolbar1):
Private Sub MakeFlat()
Dim style As Long
Dim hToolbar As Long
Dim r As Long
hToolbar = FindWindowEx(Toolbar1.hwnd, 0&, "ToolbarWindow32", vbNullString)
style = SendMessageLong(hToolbar, TB_GETSTYLE, 0&, 0&)
If style And TBSTYLE_FLAT Then
style = style Xor TBSTYLE_FLAT
Else: style = style Or TBSTYLE_FLAT
End If
r = SendMessageLong(hToolbar, TB_SETSTYLE, 0, style)
Toolbar1.Refresh
End Sub
再在Form_Load过程中调用MakeFlat就行了。
shawn cao的意见:
VB6.0中的Toolbar提供了这种功能.(在部件 Microsoft Windows common control 6.0中)。在Form中放置一个Toolbar,然后打开其属性页. 将"通用"页中最后一项"式样"改为"1-tbrFlat", 在该Toolbar上的按钮即为平面按钮。(也可直接改变Toolbar的Style属性为"1-tbrFlat")。
此问题由李海回答。