在Windows桌面程序中,应用程序类型通常有:对话框、单文档、多文档以及顶层显示的文档应用程序等。事实上,文档应用程序是最主要最有用的应用程序类型。Visual C++.NET新的MFC方式提供上述类型的应用程序向导。但在托管C++中,由于所开发的是Windows Forms应用程序,因而在构造方法、程序设计等方面均与MFC有着极大的区别。本篇首先讨论菜单、工具栏和状态栏的设计及其事件的映射等内容,然后讨论单文档/多文档应用程序的设计方法。
一、菜单
.NET框架中的Windows表单为菜单提供了Menu基类,这个基类不允许用户直接实例化,它有三个派生类:MainMenu、MenuItem和ContextMenu。MainMenu用来构造一个主菜单,所有菜单都是由MenuItem类的对象组成的,ContextMenu用来生成快捷菜单,即当用户右击鼠标时所弹出的上下文菜单。
1、菜单项操作
MenuItem类封装用户菜单所需的属性、事件和方法,下面就其属性和事件分别说明:
(1) 菜单项属性
使用过MFC菜单编辑器的用户都知道,MFC菜单项属性通常有菜单文本、标识、是否是分隔符、是否在菜单前有选中标记以及菜单的提示信息等。但在.NET框架中,菜单项属性最常用的有:菜单文本(Text)、菜单快捷键以及菜单命令的处理。例如下面的代码:
m_pFileMenuNew = new MenuItem(); m_pFileMenuNew->Text = S"打开(&O)"; m_pFileMenuNew->Shortcut = Shortcut::CtrlO; m_pFileMenuNew->ShowShortcut = true; // 将快捷键显示在菜单文本之后 m_pFileMenuNew->Click += new EventHandler(this, &WinForm::OnFileOpen); // 添加该菜单项的命令处理函数句柄 |
当然,菜单项的这些属性也可直接在其MenuItem类构造函数中进行设置,如下列代码:
m_pFileMenuNew = new MenuItem( S"打开(&O)", new EventHandler(this, &WinForm::OnFileOpen), Shortcut::CtrlO); m_pFileMenuNew->ShowShortcut = true;
|
除了上述属性外,还有IsParent(是否是父菜单项)、ShowShortcut(是否在菜单文本后面显示相应的快捷键内容)、Visible(菜单项是否可见)、Enabled(菜单是否激活)以及Checked(菜单项前有选中标记)和RadioCheck(菜单项带有单选标记)等。
需要说明的是,如果想要将某菜单项变成一个分隔符(水平线),则只需将该菜单项的Text属性设为"-"即可。
(2) 菜单事件及其处理
MenuItem菜单项事件常用的主要有Click(选定菜单)和select(光标停在菜单项)。菜单事件的处理和控件一样,基本上都是通过EventHandler来映射一个事件处理函数。例如上面的“new EventHandler(this, &WinForm::OnFileOpen)”,在OnFileOpen中可以添加相关的用户代码:
void OnFileOpen(Object *sender, EventArgs *e) { OpenFileDialog *dlg = new OpenFileDialog(); dlg->Filter = S"所有文件|*.*"; dlg->ShowDialog(); }
|