加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB备忘录(11)菜单工具栏

发布时间:2020-12-17 08:17:32 所属栏目:百科 来源:网络整理
导读:菜单编辑器 标题与名称 标题:用来显示在菜单上,给用户看和选择的。 名称:不显示在菜单上,在程序代码中用来操纵对应标题菜单的动作的。 “协调位置” 允许选择菜单的 NegotiatePosition 属性。该属性决定是否及如何在 容器窗体 中显示菜单。 这个MSDN说得

菜单编辑器


标题与名称

标题:用来显示在菜单上,给用户看和选择的。

名称:不显示在菜单上,在程序代码中用来操纵对应标题菜单的动作的。




“协调位置”

允许选择菜单的 NegotiatePosition 属性。该属性决定是否及如何在容器窗体中显示菜单。

这个MSDN说得太粗了,查了N久才明白是什么意思。

一个窗体上有菜单 ,也有添加的一个容器(控件,工具板上OLE添加一个就是),OLE容器可以是另一个程序的插入,比如插入的是excel.

在运行时,双击这个容器时就会调用excel,这个excel本身就有一个菜单B,就会和原来窗体上的窗体A,两个都会出现,那怎么排列呢?

协调位置就起这个作用,要么无(原来菜单A消失,用Excel的菜单B来代替)

要么就是左,中,右,即和菜单B混合在一起,在B的左,中,右。

详细说法如下:

设置一个值,决定当窗体的链接对象(由另一个应用程序创建和管理,然后再将它链接到 Visual Basic 应用程序中的对象)或

内嵌对象(由其它应用程序创建然后嵌入到 Visual Basic 应用程序中的对象)活动而且显示菜单时,是否显示用户设置的最上层菜单控件。

该列表有4个选项:

0(None)——(缺省值)窗体的菜单不在菜单栏中显示。
1(Left)——窗体的菜单在菜单栏的左边位置显示。
2(Middle)——窗体的菜单在菜单栏的中间位置显示。
3(Right)——窗体的菜单在菜单栏的右边位置显示。


例如,在窗体上添加嵌入一个Excel工作表对象,若将窗体上的“文件”菜单“协调位置”选择为3(右边,

则运行程序,双击激活Excel工作表对象时,用户设置的顶层“文件”菜单则显示在内嵌对象菜单的中间位置处,如下图:





索引:只对于菜单数组有用。

菜单数组的建立:把多个菜单项用相同的名称就建立了菜单数组,然后再设置它们的索引即可。

菜单数组的必须:

必须同名,且必须添加唯一索引。

必须在同一级中,且连续放置,哪怕有分隔线,分隔线也必须作为菜单数组中的一个元素。

索引必须是升序的,可以不是连续索引但必须是升级(放置位置时必须连续)



菜单的两个注意点:

1、坐标重算,有菜单时的坐标将以菜单条的左下角为坐标(0,0)。

2、弹出菜单模式化,当弹出菜单时,popupmenu下面的语句挂起,直到菜单取消,或者菜单选择并执行对应功能后才执行下面的语句。


复选菜单与级联菜单

复选,设置其有checked

级联,设置其有下级菜单(最多5级)



弹出菜单

首先要有一个特定菜单,然后用弹出事件来调用这个菜单 ,就是弹出菜单。

object.PopupMenu MenuName,Flag,X,Y,[BoldCommand]

object 菜单宿主,在哪个对象上才弹出

Flag 弹出菜单的样式,左、中、右(相对于X,Y)

X,Y 弹出菜单 的位置

BoldCommand 菜单名字(这个名字将以黑体出现)


注意,弹出菜单可以在原主菜单 中进行隐藏,根据需要在弹出中进行调用。

调用过程为: 首先将本隐藏的菜单



菜单设计

GetMenu 取得菜单句柄(如果一个窗体有菜单)

GetMenu 窗体句柄 例: GetMenu form1.hwnd

原型:Private Declare Function GetMenu Lib "user32" Alias "GetMenu" (ByVal hwnd As Long) As Long

GetSubMenu 取得弹出菜单句柄及在菜单中的位置(第一个条目为0,以下递增)。

GetSubMenu 菜单句柄,返回弹出菜单在菜单 中的位置 例: getsubmenu(MenuHwnd,0)

原型:Private Declare Function GetSubMenu Lib "user32" Alias "GetSubMenu" (ByVal hMenu As Long,ByVal nPos As Long) As Long

SetMenuItemBitmaps 为特定菜单条目设置位图

Private Declare Function SetMenuItemBitmaps Lib "user32" Alias "SetMenuItemBitmaps"

(ByVal hMenu As Long, ByVal nPosition As Long,ByVal wFlags As Long,ByVal hBitmapUnchecked As Long,204,255)">ByVal hBitmapChecked As Long) As Long

hMenu 菜单句柄

nPosition 想要设置菜单条目的标识符

wFags 根据上面选择MF_BYCOMMAND或MF_BYPOSITION

hBitmapUnchecked 撤消复选时的图形

hBitmapChecked 复选时显示的图形

例:SetMenuItemBitmaps(子菜单句柄,0,MF_BYPOSITION,New.picture,OldPicture)

美化菜单还有两个API

GetMenuInfo

SetMenuInfo






ToolBar和CoolBar

一般与imagelist相关联,以获取对应图标

已经关联的imagelist,若想进行添加或删除图标,须断开关联,添加或删除后再进行关联。

下拉菜单的工具栏,须在样式中设置为5-tbrdropdown,按钮也可分组设置为2-tbrButtonGroup

分组按钮根据button.index用select case进行判断处理

美化

用Coolbar进行美化,相当于一个容器,把ToolBar放置Coolbar中进行相关设置。



工具栏上的下拉菜单如何触发事件?

选择ButtonMenuClick事件即可。用关键字key或标记进行判断是点击了那一个菜单。

Private Sub Toolbar1_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu)
    If ButtonMenu.Key = "c" Then
        MsgBox ButtonMenu.Parent & "c"   '下拉菜单父名及本身的关键字
    End If
End Sub


ToolBar,CoolBar,ImageList三个的配合使用(动画演示)




状态栏

StatusBar

1、根据属性添加栏格(样式可以设置3种)

2、内容,可以根据属性设置,也可代码设置

Form1.StatusBar1.Panels(1).Text="作者:吹牛"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读