荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: 利用VB创建WINDOWS下的动态菜单
发信站: BBS 荔园晨风站 (Wed Jan 27 17:48:49 1999), 转信


  菜单是Windows中的一种重要资源,它将应用程序中众多的操作命令
明确分类,同时结合多级下拉与对话窗口,使其操作非常方便,加之它
可以节省大量的屏幕空间等优点,使得现在的Windows软件无一例外地
运用了菜单资源。而动态菜单是对常规菜单的一种扩展,它可根据用
户的操作内容动态地添加与之有关的菜单项或删除无关的菜单项,于
是,菜单中的选项不再是固定不变的了。例如:在许多软件的File菜单
中可以自动地添加并改变菜单项,用以保存最近几次调用过的文件名

    下面本文将以VB4.0语言为开发工具,通过一个程序设计实例具体
介绍如何在自己的Win dows程序中开发出动态菜单。
    VB提供给程序设计人员一个如图1所示的菜单生成器,用该生成器
在程序中加入菜单项是十分容易且十分愉快的事情——我们只需填写
一张"表格",就可以产生一个支持多级下拉、热键操作等功能齐全的W
indows标准菜单。
    利用菜单生成器还可以产生包含有菜单控制项数组的菜单。菜单
控制项数组是由一个或多个菜单项组成,这些菜单项共享事件过程和
一个公用的名字。每个菜单项都具有唯一的索引值(Index),但所有的
菜单项都有相同的Name值。建立控制项数组是生成动态菜单的前提,
程序设计者可以指定多个相近的菜单项为一个控制项数组,然后,就可
以在运行期间,通过操作菜单控制项数组动态地加入或删除菜单项了

    创建具有多个菜单控制项数组的步骤为:

    1.创建一个菜单项;

    2.在Index文字框中输入一个数值,这个值代表该菜单项在控制数
组中的位置;
    3.再创建具有相同控制项名字(NAME)的另一个菜单项: 图1 VB4.
0中菜单生成器实际运行界面

    4.在Index文字框中输入另一个不同的数值;

    5.对于其它菜单项重复步骤2到4。
    VB处理控制项数组的方法如下:当数组中的某一个控制项响应一
个事件后,VB就调用相应的事件过程,并将菜单项的索引值作为参数传
递给该过程,使程序能判断出哪个控制项应当响应这个事件。
    用如下步骤建立这个应用程序:
    步骤1:使用缺省的窗体,并将其标题改为"动态菜单演示窗口"。
    步骤2:加上控制项。
    在本例中控制项为两个命令按钮Command1和Command2,分别用来
完成添加菜单项和删除菜单项的功能,并分别命名为"添加菜单项"和"
删除菜单项"。
    步骤3:加上菜单。
    菜单生成器的实际运行如图1所示:共有四条菜单项,其中"演示菜
单"为主菜单名;"退出演示"用于退出该程序,它们始终是可见的;另有
两条菜单项,其中一个Caption内容为空,Nam e为Menu,Index值设为0,
用于产生菜单控制项数组,另一个为连线符"—",用于分隔显示,它们
被初始化为不可见菜单项,将在程序的运行过程中使用。
    步骤4:编写事件和菜单项通用过程。
    在运行期间用Load语句动态地把一个菜单项加到菜单控制数组中
:
    Load menuname(menunum)
    在运行期间用Unload语句动态地删除菜单控制数组中的某个菜单
项:
    Unload menuname(menunum)
图2 添加动态菜单前的运行实例
图3 添加动态菜单后的运行实例
    说明:menuname是菜单项的名字,menunum是菜单项的索引值,它们
是两个全局变量,在程序的通用声明部分声明它。程序的实际运行情
况如图2和图3所示,其中图2为添加动态菜单项之前的菜单情况,图3为
添加动态菜单项之后的菜单情况。
    程序清单如下:
    ’全局变量的声明
    Dim menunum As Integer
    Dim menuname As String
    ’添加动态菜单项的过程
    Private Sub Command1_Click()
    msg$="请输入欲添加的菜单项名称:"
    menuname$=InputBox$(msg$,"菜单项名称输入")
    If menuname$="" Then Exit Sub’对Cancle的处理
    menunum=menunum+1
    If menunum >0 And menu_line.Visible=0 Then
    menu_line.Visible=-1
    Load Menu(menunum)
    Menu(menunum).Caption=menuname$
    Menu(menunum).Visible=-1
    End  Sub
    ’删除动态菜单项的过程
    Private Sub Command2_Click()
    If menunum=0 Then Exit Sub
    num%=0
    msg$="请输入欲删除的菜单项名字:"
    menuname$=InputBox$(msg$"菜单项名称输入")
    If menuname$="" Then Exit Sub’对Cancle的处理
    For i%=1 To menunum
    If Menu(i%).Caption=menuname$ Then
    num%=i%
    Exit For
    End If
    Next i%
    If num% > menunum Or num% < 1 Then
    MsgBox"无匹配的菜单项!"
    Exit Sub
    End If
    For i%=num% to menunum1
    Menu(i%).Caption = Menu(i%+1).Caption
    Next i%
    Unload Menu(menunum)
    menunum=menunum1
    If menunum=0 Then
    menu_line.VisibIe =0
    End Sub
    ’"退出演示"菜单命令过程
    Private Sub exit_Click()
    End
    End Sub
    ’程序初始化
    Private Sub Form_Load()
    menunum=0
    menuname=""
    End Sub
    ’添加后的动态菜单项的命令响应
    Private Sub Menu_Click(Index As Integer)
    MsgBox("这是"+Menu(Index).Caption+"菜单项的事件响应")
    End Sub

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店