菜单(Menu)是程序界面的重要架构部件,自从有了可视化编程工具,使用其中的菜单编辑器就可以方便、快捷的编辑、设计菜单。但要想制作出个性化的菜单,哪怕对菜单项的任何改变,如:改变菜单的字体类型、大小等,只使用菜单编辑器是无法完成了。可视化编程工具Visual Studio .Net也是如此。本文的主要内容就是介绍利用Visual Basic .Net手工绘制个性化菜单的实现方法。
一.简介.Net Frame Work SDK 为在VB.Net绘制菜单提供的工具: .Net Frame Work SDK为Visual Basic .Net实现个性化菜单提供了许多工具。其中最重要是二个事件及其参数:DrawItem事件和其中的DrawItemEventArgs参数,MeasureItem事件和其中的MeasureItemEventArgs参数。
1. DrawItem事件和其中的DrawItemEventArgs参数:
DrawItem事件是当菜单项的OwnerDraw属性设置为True并且发出绘制菜单项的请求时才发生。个性化菜单制作的处理方法就是在此事件中完成的。在DrawItem事件处理程序中将接收一个 DrawItemEventArgs类型的参数,它包含与此事件相关的数据,这些数据对绘制菜单是很重要的。表01是DrawItemEventArgs类型参数提供特定于此事件的信息。
属性 |
说明 |
BackColor |
获取所绘制的项的背景色。 |
Bounds |
获取表示所绘制项的边界的矩形。 |
Font |
获取分配给所绘制项的字体。 |
ForeColor |
获取所绘制项的前景色。 |
Graphics |
获取要在其上绘制项的图形表面。 |
Index |
获取所绘制项的索引值。 |
State |
获取所绘制项的状态。 |
表01:DrawItemEventArgs类型参数提供DrawItem事件特定的信息
2. MeasureItem事件和其中的MeasureItemEventArgs参数:
触发MeasureItem事件必须将菜单项的OwnerDraw属性设置为True,个性化菜单制作可通过此事件来获取、设定菜单项的大小等。MeasureItem事件处理程序中接收一个MeasureItemEventArgs类型的参数,此参数对获取、设定菜单项的大小是非常重要的。表02是MeasureItemEventArgs类型参数提供MeasureItem事件的特定信息。
属性 |
说明 |
Graphics |
获取要测量的Graphics对象。 |
Index |
获取、设置需要有高度和宽度的项索引。 |
ItemHeight |
获取、设置由Index指定的项高度。 |
ItemWidth |
获取、设置由Index指定的项 |
表02是MeasureItemEventArgs类型参数提供MeasureItem事件的特定信息
二.本文介绍程序的设计、调试、运行的软件环境:
(1).微软公司视窗2000服务器版
(2).Visual Studio .Net正式版,.Net FrameWork SDK版本号3705
三.循序渐进绘制自己的菜单: 为了加深理解,我们用菜单编辑器设计一个简单的菜单,然后在此基础上加上个性化定制,重新绘制个性化的菜单。以下步骤就是利用Visual Studio的菜单编辑器制作一个简单的菜单:
1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual Basic项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【Visual Basic .Net编程之DIY--自己画菜单】。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在"E:\VS.NET项目"目录中就产生了名称为"Visual Basic .Net编程之DIY--自己画菜单"的文件夹,并在里面创建了名称为"Visual Basic .Net编程之DIY--自己画菜单"的项目文件。
7. 把Visual Studio .Net的当前窗口切换到【Form1.vb(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往Form1窗体中拖入下列组件:一个MainMenu组件,名称为"MainMenu1"。
8. 选中"MainMenu1"组件,单击鼠标右键,在弹出的菜单中选择"编辑菜单"。并按照图01所示界面设计菜单:
图01:【Visual Basic .Net编程之DIY--自己画菜单】项目设计界面之一 |
9. 此时保存上述步骤,并单击快捷键F5,则得到图02所示界面:
图02:【Visual Basic .Net编程之DIY--自己画菜单】运行界面之一 |
这样通过菜单编辑器就完成了一个非常普通的菜单,下面就对此菜单进行改造,在改造之前,要先设定项目中的三个MenuItem类实例的OwnerDraw属性值为"True"。因为只有此属性值为"True"才会触发绘制菜单时所需要的DrawItem事件和MeasureItem事件。之后再在上面项目的基础上执行下一步操作: