相信VB无所不能的人帮帮我:Office那样的菜单栏

avant 2002-04-13 02:09:26
我知道Delphi里面可以把菜单放到CoolBar+ToolBar,不知道在VB里怎么实现?
...全文
390 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
avant 2002-04-27
  • 打赏
  • 举报
回复
试来试去,从原理到实现到结果细节做的最好的还是vbsmart.com给的免费ocx,可惜没有源码——有些小问题,中文显示的不是太好,有源码就好了:)

那一套不用ocx作XP效果的控件,基本是垃圾,每一个上头都放Timer,狂耗资源!一阵儿就死翘翘!我试着改了一个XPButton,效率好多了,又懒的改别的。你在它作的菜单上来回移动鼠标,哈哈……瑞星的XP菜单也有这个问题,猛移鼠标,它就废了!

太累,不玩儿这个了,再过一天结贴子。
gameboy999 2002-04-26
  • 打赏
  • 举报
回复
我记得以前VB版还讨论过这个问Coolbar + toolbar来做菜单..

当时做法是toolbar里面放置按钮,然后根据不同按钮来弹出popupmenu..
并不需要 你说的 <<avant(千寻) "考虑用于控制菜单的重画等等">>
不需要重画!


至于模仿效果还有人写出程序了,忘记他名字和帖子了..做得不错.确实是子类化窗体以后做到的...至于点击菜单以后移动鼠标要模拟菜单那样自动弹出.好像是hitTest来做的..

SetCapture和ReleaseCapture也是必须的..
avant 2002-04-23
  • 打赏
  • 举报
回复
哈哈哈,哈哈哈……
avant 2002-04-20
  • 打赏
  • 举报
回复
没人敢应战了?!
avant 2002-04-19
  • 打赏
  • 举报
回复
说Coolbar + Toolbar能做Menu Bar的大虾,不妨做一个给我看看,就像IE或资源管理器那样的菜单栏,能在Coolbar上移动的那种——我作了很多尝试了,不行!SP5装的有!!
我的信箱:avant@371.net
ayuu 2002-04-18
  • 打赏
  • 举报
回复
我觉得最简单的还是用coolbar和toolbar。
288794 2002-04-18
  • 打赏
  • 举报
回复
mis98ZB,发短信息找他吧,好象很久没有浮出水面了.
288794 2002-04-18
  • 打赏
  • 举报
回复
昨晚回去看了 MSDN,看来用 VB 实现确实是有点困难,但在技术上也不是实现不
了的,要用到的技术很多,子类化,鼠标钩子,键盘钩子......
我靠!看来有时间要花时间来封装它......
同志们,多多努力吧......

ToolbarWindow32 是版本 5 的 ToolBar 使用。
likesome 2002-04-18
  • 打赏
  • 举报
回复
前提只要VB你装了SP5
你用Coolbar + Toolbar跟Delphi中是一样的
引用 mircrosoft windows comman ctroal 5.0版
寒雪叔叔 2002-04-18
  • 打赏
  • 举报
回复
vb同样可以CoolBar + toolbar
288794 2002-04-18
  • 打赏
  • 举报
回复
不行啊,MSDN 就是这样介绍的,要不然你如何处理 Alt 等键盘事件。
avant 2002-04-18
  • 打赏
  • 举报
回复
子类化这两天我也琢摸过,是VB中的消息接收机制,考虑用于控制菜单的重画等等,确实比较麻烦。

不过我现在不用处理接收消息,只发消息,所以用不到那么麻烦的技术,思路有的,就是没调试好:
1.发送TB_GETBUTTONINFO,得到TBBUTTONINFO结构
2.TBBUTTONINFO.fsStyle中加入TBSTYLE_GROUP风格
3.发送TB_SETBUTTONINFO,重设TBBUTTONINFO结构

ayuu(ayuu),伙计,就是用coolbar和toolbar,做Menu Bar。
bayern2002 2002-04-17
  • 打赏
  • 举报
回复
288794,不错,不错,没看仔细,今天上MSDN跟Delphi源码折腾了大半天,回过去一看,呵呵,早看清就不用费劲了:)

但是,如果我没再次看错,你那段代码是改变Toolbar的Style,不显示Image,我要做的东西还很多:
1.不显示下拉箭头,即让主体按钮和下拉箭头按钮一体,已实现:
SendMessage hToolbar, TB_SETEXTENDEDSTYLE, 0, BTNS_WHOLEDROPDOWN
2.将所有的菜单按钮Style加类似于Delphi中Grouped属性,才能表现得真象菜单,否则在hover状态转到另一个按钮不变化.跟Delphi源码,是用TB_SETBUTTONINFO,其中

Private Type TBBUTTONINFO
cbSize As Long
dwMask As Long
idCommand As Long
iImage As Long
fsState As Byte
fsStyle As Byte
cx As Integer
lParam As Long
pszText As String
cchText As Long
End Type

结构的fsStyle需要or一下TBSTYLE_GROUP(&H4)

我采用先TB_GETBUTTONINFO,然后修改该结构,再发送TB_SETBUTTONINFO,不成想怎么都执行不成功:(

偶对VB不熟,刚用了几天,改起来实在头大,还请288794老大多多帮忙,多谢多谢!
wenw 2002-04-17
  • 打赏
  • 举报
回复
方法很多,要不要源代码呀
avant 2002-04-17
  • 打赏
  • 举报
回复
参见:
wwfang(方耀东):
lTBarHwnd = FindWindowEx(TBar.hWnd, 0&, "ToolbarWindow32", vbNullString)
288794():
htool=findwindowEX(Toolbar1.hwnd,0&,"msvb_lib_toolbar",vbNullstring)

经过我机器上测试,288794()的参数是可行的,即"msvb_lib_toolbar",照一些资料上说的"ToolbarWindow32"不行;即使第三个参数也设置成vbNullstring,也能得到正确的句柄。
zyl910 2002-04-17
  • 打赏
  • 举报
回复
写错了!是选择菜单
zyl910 2002-04-17
  • 打赏
  • 举报
回复
一、怎样得到ToolBar中的菜单的句柄?
二、怎样是它能像真正的菜单一样:可以用左右方向键移动菜单?
avant 2002-04-17
  • 打赏
  • 举报
回复
在哪儿能找到mis98ZB大虾呀?谢谢288794。
fangyds 2002-04-17
  • 打赏
  • 举报
回复
另外:
你还可以去下载一个spdbdock.ocx控件,它是一个被称作“入坞”的控件,
这样你可以把菜单放在一个窗体中,然后在程序启动时让它“入坞”即可。
fangyds 2002-04-17
  • 打赏
  • 举报
回复
taking over almost any new application which has toolbars - and I can see why. I mean, it's got style, a simple look and adds an attractive side to your application. Visual Basic 5.0 didn't bring these controls in as a part of its new control set, but you can do it yourself with the old Common Controls Toolbar, and an API call.

1. Create a new project, and add the Common Controls ActiveX control to it.
2. Draw the Toolbar onto a form. Add your buttons.
3. Place the following into the General Declarations section:

Private Declare Function FindWindowEx Lib "user32" _
Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal _
hWndChildWindow As Long, ByVal lpClassName As String, _
ByVal lpsWindowName As String) As Long

Const TB_SETSTYLE = WM_USER + 56
Const TB_GETSTYLE = WM_USER + 57

Const WM_USER = &H400

Const TBSTYLE_FLAT = &H800


4. Add this Sub to the General Declarations Section as well:

Public Sub SetTBar97(TBar As Toolbar)
Dim lTBarStyle As Long, lTBarHwnd As Long
lTBarHwnd = FindWindowEx(TBar.hWnd, 0&, _
"ToolbarWindow32", vbNullString)
lTBarStyle = SendMessage(lTBarHwnd, TB_GETSTYLE, _
0&, 0&)
lTBarStyle = lTBarStyle Or TBSTYLE_FLAT
SendMessage lTBarHwnd, TB_SETSTYLE, 0, lTBarStyle
TBar.Refresh
End Sub


5. Add a Module and add this to it:

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _
Long, ByVal wParam As Long, lParam As Any) As Long


6. You can make the Toolbars Office 97 Style with:

SetTBar97 Toolbar1

Toolbar1, of course, being your toolbar control's name.
加载更多回复(22)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧