670 likes | 749 Views
界 面 设 计. 第 10 章. 本章要点: 菜单的设计 工具栏的设计 状态栏的设计 对话框的设计. 10.1 菜单的设计. Windows 环境下几乎所有的应用软件都通过菜单实现各种操作。菜单将应用程序的各种操作分组显示在界面上,用户可以方便地从菜单中选择执行各种功能。. 两种基本菜单类型: 下拉式菜单 弹出式菜单. 子 菜单. 主菜单标题. 主菜单栏. 子 菜单. 菜单命令. 分隔条. 1. 下拉式菜单的结构. 10.1.1 下拉式菜单. 访问键. 快捷键. 顶级菜单. 2. 菜单编辑器
E N D
界 面 设 计 第10章 本章要点: • 菜单的设计 • 工具栏的设计 • 状态栏的设计 • 对话框的设计
10.1 菜单的设计 • Windows环境下几乎所有的应用软件都通过菜单实现各种操作。菜单将应用程序的各种操作分组显示在界面上,用户可以方便地从菜单中选择执行各种功能。 • 两种基本菜单类型: • 下拉式菜单 • 弹出式菜单
子 菜单 主菜单标题 主菜单栏 子 菜单 菜单命令 分隔条 1. 下拉式菜单的结构 10.1.1 下拉式菜单 访问键 快捷键 顶级菜单
2. 菜单编辑器 • 菜单项: 看成控件,具有其属性、事件、方法。 • 菜单项也称为菜单控件。 • 菜单设计: 通过“菜单编辑器”完成。 • 首先使窗体成为当前窗体 • 使用以下方法打开菜单编辑器: • 执行“工具”菜单下的“菜单编辑器”命令 • 单击标准工具栏的“菜单编辑器”按钮 • 从窗体快捷菜单中选择“菜单编辑器”命令 • 菜单编辑器结构: 属性区、编辑区、菜单列表区
Caption Name 属性区 Index Shortcut 编辑区 菜单列表区 Checked Enabled Visible WindowList(MDI) HelpContextID NegotiatePosition 注: 标题框中键入“-”和“&”符号的作用。 不能给顶级菜单项加快捷键。
Text1 • 【例10-1】设计菜单界面,如下图所示。下拉菜单中的子菜单项用于对文本框Text1设置字体、字号、文字颜色和文字效果。其中,效果子菜单下的各菜单项具有复选功能,设运行初始时各项前面没有√符号,与文本框的初始状态一致。 各子菜单结构见P194
(续表) • 标 题 • 名称 • 索引 • 快捷键 • 说 明 • 颜色(&C) • CC • 访问键Alt+C • ....红色 • CC1 • ....绿色 • CC2 • ....蓝色 • CC3 • 访问键Alt+E • 效果(&E) • DD • ....删除线 • DD1 • ....下划线 • DD2 • ....粗体 • DD3 • ....斜体 • DD4
1) “字体”菜单下的菜单项设计成一个控件数组AA1,共享以下事件过程: • Private Sub AA1_Click(Index As Integer) • Text1.Font = AA1(Index).Caption • End Sub • 2) “字号”菜单下的菜单项设计成一个控件数组BB1,共享以下事件过程: • Private Sub BB1_Click(Index As Integer) • Text1.FontSize = Val(BB1(Index).Caption) • End Sub
3) “颜色”菜单下的各菜单项为独立的菜单控件,因此应分别在其单击事件过程中编写代码,各事件过程如下: • Private Sub CC1_Click() • Text1.ForeColor = vbRed • End Sub • Private Sub CC2_Click() • Text1.ForeColor = vbGreen • End Sub • Private Sub CC3_Click() • Text1.ForeColor = vbBlue • End Sub
4) “效果”菜单下的各菜单项具有复选功能,每次单击时应切换成另一种状态,因此要判断当前菜单项的Checked属性,各事件过程如下: • Private Sub DD1_Click() • If DD1.Checked = True Then • Text1.FontStrikethru = False • DD1.Checked = False • Else • Text1.FontStrikethru = True • DD1.Checked = True • End If • End Sub
Private Sub DD2_Click() • If DD2.Checked = True Then • Text1.FontUnderline = False • DD2.Checked = False • Else • Text1.FontUnderline = True • DD2.Checked = True • End If • End Sub
Private Sub DD3_Click() • If DD3.Checked = True Then • Text1.FontBold = False • DD3.Checked = False • Else • Text1.FontBold = True • DD3.Checked = True • End If • End Sub
Private Sub DD4_Click() • If DD4.Checked = True Then • Text1.FontItalic = False • DD4.Checked = False • Else • Text1.FontItalic = True • DD4.Checked = True • End If • End Sub
【例10-2】在窗体上设计菜单,菜单标题为“图像”,图像菜单下包括以下4个菜单项:【例10-2】在窗体上设计菜单,菜单标题为“图像”,图像菜单下包括以下4个菜单项: • 1) 载入:名称为LoadPic,用于向图片框中装入一幅图像,初始的Enabled属性为True。 • 2) 清除:名称为ClearPic,用于清除图片框中的图像,初始的Enabled属性为False。 • 3) 显示:名称为ShowPic,用于显示图片框中的图像,初始的Enabled属性为False。 • 4) 隐藏:名称为HidePic,用于隐藏图片框中的图像,初始的Enabled属性为False。
a) c) b) • 运行时,界面的初始状态如图a,单击“载入”命令可以在打开的输入框中输入要载入的图像文件名,确定后将指定的图像显示在图片框Picture1中,这时的“图像”菜单变成图b的状态。这时如果选择“清除”命令,则清除图片框中的图片,菜单变成图a所示;如果选择“隐藏”命令,则隐藏图片框,菜单变成图c所示,而单击“显示”命令菜单又回到图b的状态。
各菜单项的Click事件过程如下: • Private Sub ClearPic_Click() ' 清除 • Picture1.Picture = LoadPicture() • ClearPic.Enabled = False • LoadPic.Enabled = True • HidePic.Enabled = False • ShowPic.Enabled = False • End Sub
Private Sub Loadpic_Click() ' 载入 • PicName = InputBox("请输入图像文件名") • On Error GoTo ErrHandler • Picture1.Picture = LoadPicture(PicName) • ClearPic.Enabled = True • LoadPic.Enabled = False • HidePic.Enabled = True • ShowPic.Enabled = False • Exit Sub ' 正常执行则到这里结束 • ErrHandler: ' 错误处理程序入口 • MsgBox "图像加载错误" • End Sub
Private Sub HidePic_Click() ' 隐藏 • Picture1.Visible = False • ClearPic.Enabled = False • LoadPic.Enabled = False • HidePic.Enabled = False • ShowPic.Enabled = True • End Sub • Private Sub ShowPic_Click() ' 显示 • Picture1.Visible = True • ClearPic.Enabled = True • LoadPic.Enabled = False • HidePic.Enabled = True • ShowPic.Enabled = False • End Sub
将本例对Enabled属性的设置改成对Visible属性的设置可以修改成将无效的菜单项隐藏起来,只显示可用的菜单项。将本例对Enabled属性的设置改成对Visible属性的设置可以修改成将无效的菜单项隐藏起来,只显示可用的菜单项。 • 用前面的方法建立的菜单,菜单项是固定的,菜单项不能自动增减。尽管可以通过设置菜单项的Visible属性使某些菜单项暂时隐藏起来,在必要的时候再将其显示出来,但也必须首先在菜单编辑器中设计所有的菜单项。在某些情况下,菜单项的个数在设计时是不可预测的,只能在程序运行时动态增减,用前面的方法就难以实现。
要实现菜单项的动态增减,可以通过菜单数组来实现。通常,首先设计一个菜单项,定义该菜单项为菜单数组的第一项,即在菜单编辑器中,设置其“索引”属性值为0,“可见”属性为False(不可见)。在需要增加菜单项时,使用Load方法向该菜单数组增加新的菜单项,并对新增的菜单项设置标题(Caption)和可见(Visible)属性;在需要减少菜单项时,使用Unload方法从该菜单数组中删除一项。要实现菜单项的动态增减,可以通过菜单数组来实现。通常,首先设计一个菜单项,定义该菜单项为菜单数组的第一项,即在菜单编辑器中,设置其“索引”属性值为0,“可见”属性为False(不可见)。在需要增加菜单项时,使用Load方法向该菜单数组增加新的菜单项,并对新增的菜单项设置标题(Caption)和可见(Visible)属性;在需要减少菜单项时,使用Unload方法从该菜单数组中删除一项。
【例10-3】设计菜单,使得运行时初始界面如下图a所示。主菜单项“文件”下有两个固定的子菜单项“打开”和“关闭”及分隔线。要求:运行时单击“打开”菜单项在分隔线下面增加一个新的菜单项,单击“关闭”命令时删除分隔线下面一个指定的菜单项。单击新增的菜单项可以执行相应的应用程序。【例10-3】设计菜单,使得运行时初始界面如下图a所示。主菜单项“文件”下有两个固定的子菜单项“打开”和“关闭”及分隔线。要求:运行时单击“打开”菜单项在分隔线下面增加一个新的菜单项,单击“关闭”命令时删除分隔线下面一个指定的菜单项。单击新增的菜单项可以执行相应的应用程序。 a) b)
主要设计步骤: • 1)执行“工具”菜单中的“菜单编辑器”命令,打开菜单编辑器,按下表设计菜单。
2)在窗体模块中定义模块级变量MenuNum,用于保存当前SubMenu菜单数组的最大下标:2)在窗体模块中定义模块级变量MenuNum,用于保存当前SubMenu菜单数组的最大下标: • Dim MenuNum As Integer • 3)编写“打开”菜单项的Click事件过程如下: • Private Sub SubOpen_Click() • OpenFileName = InputBox("请输入文件名称") • If Trim(OpenFileName) <> "" Then • MenuNum = MenuNum + 1 • Load SubMenu(MenuNum) • SubMenu(MenuNum).Caption = OpenFileName • SubMenu(MenuNum).Visible = True • End If • End Sub
4)编写“关闭”菜单项的Click事件过程如下: • Private Sub SubClose_Click() • N = Val(InputBox("请指定关闭第几个文件")) • If N > MenuNum Or N < 1 Then • MsgBox "超出范围!" • Else • For I = N To MenuNum - 1 • SubMenu(I).Caption = SubMenu(I + 1).Caption • Next I • Unload SubMenu(MenuNum) • MenuNum = MenuNum - 1 • End If • End Sub
5)新增加的菜单项是一些应用程序的名字(包括路径)。要实现单击这些菜单项时能够执行相应的文件名指定的应用程序,需要在菜单数组的Click事件过程中应编写如下代码:5)新增加的菜单项是一些应用程序的名字(包括路径)。要实现单击这些菜单项时能够执行相应的文件名指定的应用程序,需要在菜单数组的Click事件过程中应编写如下代码: • Private Sub SubMenu_Click(Index As Integer) • Shell SubMenu(Index).Caption, vbNormalFocus • End Sub
10.1.2 弹出式菜单 • 弹出式菜单:上下文菜单、快捷菜单、右键菜单 • 为某对象设计弹出式菜单的步骤: • 1) 在菜单编辑器中设计各菜单项,然后将顶级菜单设置为不可见。 • 2) 在对象的MouseDown事件过程中编写代码,用以下的PopupMenu方法显示弹出式菜单: • [<窗体名>.]PopupMenu <菜单名> • ,flags[,x[,y[,boldcommand]]]] • 功能: 在当前鼠标位置或指定的坐标位置显示弹出式菜单。
参数: • <窗体名>:指菜单所在的位置,如果省略,则默认为是当前窗体。 • <菜单名>:指在菜单编辑器中设计的菜单项(至少有一个子菜单)的名称。 • Flags:可选项,可以是一个数值或常量,用于指定弹出式菜单的位置和行为,取值见P199表10-3和表10-4。如果要同时指定位置和行为时,则将两个参数值用Or连接,如: 4 Or 2 • x、y:指定显示弹出式菜单的x坐标和y坐标。省略时为鼠标坐标。 • boldcommand:指定弹出式菜单中要显示为黑体的菜单控件的名称。如果该省略参数,则弹出式菜单中没有以黑体字出现的菜单项。
Text1 【例10-4】在例10-1的基础上设计窗体和文本框的弹出式菜单。如下图所示。 窗体的 弹出式菜单 文本框的 弹出式菜单
设计步骤: 1) 在菜单编辑器上增加以下设置:
2) 在文本框的MouseDown事件过程中编写代码 Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then PopupMenu EE, 0 Or 0 End If End Sub 只接受左键单击 左上角位于坐标处 参数Button: 1 —按下鼠标的左按钮 2 —按下鼠标的右按钮 4 —按下鼠标的中间按钮
3) 在窗体的MouseDown事件过程中编写代码 • Private Sub Form_MouseDown(Button As Integer, • Shift As Integer, X As Single, Y As Single) • If Button = 2 Then • PopupMenu FF,8 Or 0, , ,FF3 • End If • End Sub 只接受左键单击 右上角位于坐标处 FF3菜单项显示为粗体 x,y省略,但要保留逗号
4) 在窗体模块的通用声明段声明变量Fcolor,用于保存窗体的初始颜色: Dim Fcolor As Long 5) 在窗体的Load事件过程中保存窗体的初始背景颜色: Private Sub Form_Load() Fcolor = Form1.BackColor End Sub
6) 编写实现菜单命令功能的代码 Private Sub EE1_Click() Text1.FontSize = Text1.FontSize + 1 End Sub Private Sub EE2_Click() Text1.FontSize = Text1.FontSize – 1 End Sub Private Sub EE3_Click() If EE3.Caption = "锁定" Then EE3.Caption = "取消锁定" Text1.Locked = True Else EE3.Caption = "锁定" Text1.Locked = False End If End Sub
Private Sub FF1_Click() Form1.BackColor = vbRed End Sub Private Sub FF2_Click() Form1.BackColor = vbGreen End Sub Private Sub FF3_Click() Form1.BackColor = Fcolor End Sub
10.2 工具栏的设计 • 作用: 常用于提供对最常用的菜单命令的快速访问 • 设计: • 手工方式 • 使用工具栏控件
10.2.1 用手工方式制作工具栏 • 1) 在窗体上放置一个图片框,设置其Align属性为:1 - Align Top,调整图片框的高度。 • 2) 在图片框中放置控件。 • 3) 给控件装入一定的图片。 • 4) 设置控件的ToolTipText属性,添加适当的提示。 • 5) 为各工具栏控件编写代码。 • 如果工具栏控件的功能已经包括在某菜单项中,则可以直接调用菜单项的相应事件过程 。
Check1~ Check4 • 【例10-5】在例10-4的基础上添加工具栏。如下图。 放置4个复选框控件,分别用于完成“效果”菜单 下的四个功能。 • 给复选框的ToolTipText属性分别设置功能提示: 删除线、下划线、粗体、斜体。
分别在复选框控件的Click事件过程中编写代码:分别在复选框控件的Click事件过程中编写代码: • Private Sub Check1_Click() • Text1.FontStrikethru = Check1.Value • End Sub • Private Sub Check2_Click() • Text1.FontUnderline = Check2.Value • End Sub • Private Sub Check3_Click() • Text1.FontBold = Check3.Value • End Sub • Private Sub Check4_Click() • Text1.FontItalic = Check4.Value • End Sub
10.2.2 使用ToolBar控件制作工具栏 • 设计步骤: • 1) 向工具箱添加ToolBar控件、 ImageList控件。 • 工程→部件→ 选择 “Microsoft Windows Common Controls 6.0” • 2) 向窗体上添加ToolBar控件、ImageList控件, • 常用ImageList控件提供工具栏所需的图片。 • 3) 设置ImageList控件的“属性页” ,定义图像集。 • 4) 设置ToolBar控件的“属性页”。定义按钮对象集。引用索引号为n的按钮: Buttons(n) • 例:设置Toolbar1中索引号为3的按钮的标题。 • Toolbar1.Buttons(3).Caption = "显示" • 5) 编写代码: 在ButtonClick事件过程或ButtonMenuClick事件过程中编写。
ToolBar1 Shape1 ImageList1 Timer1 Interval:100 Enabled:False • 【例10-6】用Toolbar控件设计工具栏,界面如下图所示,运行时,当按下箭头按钮时,图形将沿着箭头指定的方向移动,当按下形状按钮组中的任何一个按钮时,图形将变成相应的形状。按“Stop”按钮停止移动。
代码如下: Dim Direction As Integer ' Direction做为移动方向的标志 Private Sub Timer1_Timer() '根据箭头按钮决定移动方向 '设每次移动步长为50Twips,当移动到窗体边缘时不再移动 Select Case Direction Case 1 '如果选择向上移动 If Shape1.Top-50>Toolbar1.Height _ Then Shape1.Top= Shape1.Top - 50 Case 2 '如果选择向下移动 If Shape1.Top+Shape1.Height+50 <Form1.ScaleHeight _ Then Shape1.Top = Shape1.Top + 50 Case 3 '如果选择向左移动 If Shape1.Left-50>0 Then Shape1.Left=Shape1.Left - 50 Case 4 '如果选择向右移动 If Shape1.Left+Shape1.Width+50 < Form1.ScaleWidth _ Then Shape1.Left = Shape1.Left + 50 End Select End Sub
Private Sub Toolbar1_ButtonClick _ (ByVal Button As MSComctlLib.Button) '根据按下的形状按钮分情况进行处理 Select Case Button.Index Case 1 Shape1.Shape = 3 '设图形形状为圆形 Case 2 Shape1.Shape = 2 '设图形形状为椭圆 Case 3 Shape1.Shape = 4 '设图形形状为圆角矩形 Case 4 Shape1.Shape = 0 '设图形形状为矩形
Case 6 Direction = 1 ' Direction为1表示上移 Timer1.Enabled = True Case 7 Direction = 2 ' Direction为2表示下移 Timer1.Enabled = True Case 8 Direction = 3 ' Direction为3表示左移 Timer1.Enabled = True Case 9 Direction = 4 ' Direction为4表示右移 Timer1.Enabled = True Case 11 '单击“停止”按钮关闭定时器,停止移动 Timer1.Enabled = False End Select End Sub
10.3 对话框的设计 • 对话框: 特殊类型的窗体对象。 • 作用: 是用户和应用程序交互的主要途径。 • 建立方法: • 使用预定义对话框,即输入框、消息框。 • 定义对话框。 • 使用CommonDialog控件创建通用对话框。
10.3.1 自定义对话框 • 设计步骤 : • 1) 添加窗体: 工程添加窗体。 • 2) 将窗体定义成对话框风格。 • 如:不能移动、改变尺寸、最大或最小化 • 例: BorderStyle设置为1—单边框,不能改变大小 • ControlBox设置为False—删除控制菜单框 • MaxButton设置为False—删除最大化按钮 • MinButton设置为False—删除最小化按钮 • 3) 在对话框上添加按钮,如“确定”与“取消”按钮。 • 4) 在对话框上添加其它控件。 • 5) 在适当的位置编写显示对话框的代码。
两种显示方式: 模式对话框与无模式对话框 。 • 显示模式对话框 • 窗体名.Show vbModal 或 窗体名.Show 1 例如: Form2.Show vbModal • 显示无模式对话框 • 窗体名.Show vbModeless 或 • 窗体名.Show 0 或 窗体名.Show 例如: Form2.Show vbModeless • 为确保对话框可以随其父窗体的最小化而最小化,随其父窗体的关闭而关闭,需要在Show方法中定义父窗体。 例如: Private Sub Command1_Click() Form2.Show vbModeless, Form1 End Sub
6) 编写实现对话框功能的的代码,如“确定”按钮和“取消”按钮的单击事件过程。不同的对话框所完成的功能不同,因此应根据实际要求编写代码 7) 编写从对话框退出的代码 例如: Unload Form2 或: Form2.Hide Unload语句把对话框从内存中删除,该对话框本身以及它的控件都从内存中卸载。而Hide方法只是通过设置对话框的Visible属性为False将其从视窗中删除。该对话框以及它的控件仍留在内存中。
Text1 Command1 Option1 Option2 Option3 Command2 • 【例10-7】设计应用程序,包含一个主菜单界面和一个对话框,在主菜单界面单击某“运行”菜单项,将打开一个模式对话框,在对话框中指定要运行的文件名及其运行方式(正常、最大化、最小化),单击“确定”按钮按指定的方式运行指定的文件,如果输入文件名错误,将给出警告并返回该对话框;单击“取消”按钮返回主菜单界面。 a) b)