03界面编程1-菜单(9)

2020-04-03 13:02

图3-28 资源快捷菜单

图3-29 添加资源对话框

VS就会自动添加一个ID为IDR_MENU1的空菜单,并打开菜单编辑器窗口,参见图3-30中部。在选中IDR_MENU1后,还会打开“菜单节点”属性窗口,参见图3-30右部。

2.修改菜单ID

在右边的“菜单节点”属性窗口的ID栏中,对默认的ID符号常量(如IDR_MENU1)进行修改(如改为IDR_EDIT_MENU,参见图3-30),按回车键完成修改。

图3-30 修改快捷菜单ID

3.编辑菜单

在菜单编辑器窗口中,可键入顶层的快捷菜单名,然后再加入其他菜单项。例如,Student例中的菜单名为“编辑(&E)”,添加了四个菜单项(包括一个分隔条)(同默认菜单条上的“编辑”菜单,参见表3-3):

注意:其中的ID都是默认菜单中已有的,直接在ID列表中选择即可,也不用自己输入提示串(选中ID后,会自动出现提示串),而且也不用设置快捷键(已被默认菜单设置)。

36

表3-3 编辑菜单项的属性值

菜单项 属性 撤消 分隔条 剪切 复制 粘贴 Caption ID Prompt 撤消(&U)\\tCtrl+Z ID_EDIT_UNDO 撤消上一操作\\n撤消 剪切选定内容并将其放到剪贴板上\\n剪切 复制选定内容并将其放到剪贴板上\\n复制 剪切(&T)\\tCtrl+X ID_EDIT_CUT 复制(&C)\\tCtrl+C ID_EDIT_COPY 粘贴(&P)\\tCtrl+V ID_EDIT_PASTE 插入剪贴板内容\\n粘贴 为了省事,也可以不使用资源编辑器一个一个地添加菜单项,而直接以文本方式打开资源脚本文件(需先关闭资源编辑器),在顶层菜单资源后添加如下代码(其中的编辑菜单部分可以从顶层菜单资源中复制):

IDR_EDIT_MENU MENU

BEGIN // 以下同主菜单中的“编辑”菜单

POPUP \编辑(&E)\

BEGIN

MENUITEM \撤消(&U)\\tCtrl+Z\ MENUITEM SEPARATOR

MENUITEM \剪切(&T)\\tCtrl+X\ MENUITEM \复制(&C)\\tCtrl+C\ MENUITEM \粘贴(&P)\\tCtrl+V\ END END

关闭资源文件后,再打开资源编辑器,可以看到添加的“编辑”(快捷)菜单的结果,如图3-31 a)所示。

a) 资源 b) 运行 图3-31 “编辑”快捷菜单

37

3.4.2 使用快捷菜单

1.具体步骤

下面是添加弹出快捷菜单响应的具体步骤:

? 在项目工作区类视图页中选中应用程序的视图类(如Student例为CStudentView)。 ? 在属性窗口中按其工具条上的消息按钮

,切换到消息页。

? 滚动属性窗口中的消息内容,找到WM_CONTEXTMENU消息项;单击其右边的

空白栏,出现下拉式列表框;单击其右端的OnContextMenu”选项。

? 选中该选项,系统会自动创建视图类的上下文菜单消息响应函数OnContextMenu,

并自动打开代码文件,定位到该函数。

? 去掉此函数两个输入参数中的注释符号“/*”和“*/”。

? 在“// TODO: 在此处添加消息处理程序代码”后,添加响应代码(包括创建菜单

对象、装入菜单资源、显示弹出菜单等)。

钮,出现唯一的“

2.弹出代码

例如,Student例中弹出菜单的响应函数为(粗体为新加的代码部分):

void CStudentView::OnContextMenu(CWnd* pWnd, CPoint point) {

// TODO: 在此处添加消息处理程序代码 CMenu menu;

menu.LoadMenu(IDR_EDIT_MENU);

menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |

TPM_RIGHTBUTTON, point.x, point.y, this);

}

则编译运行后,用户在应用程序的客户区中按鼠标右键,就会在光标处弹出编辑快捷菜单,参见图3-31 b)。

38

3.跟踪弹出菜单函数

在上面的代码中,使用了CMenu类的成员函数TrackPopupMenu(跟踪弹出菜单),其原型为:

BOOL TrackPopupMenu( // 成功时返回TRUE

UINT nFlags, // 对齐方式参数

int x, // 菜单位置的x坐标,依赖于对齐方式 int y, // 菜单顶的y坐标 CWnd* pWnd, // 父窗口 LPCRECT lpRect = 0 // 被忽略 );

其中,参数nFlags取值(对齐方式):

? TPM_CENTERALIGN(菜单与x水平中对齐) ? TPM_LEFTALIGN(菜单的左边框与x对齐) ? TPM_RIGHTALIGN(菜单的右边框与x对齐) ? TPM_LEFTBUTTON(只能使用左鼠标键选择菜单项) ? TPM_RIGHTBUTTON(可使用左右鼠标键选择菜单项)

3.4.3 默认快捷菜单

如果是在VC10中创建默认的MFC程序(不是传统的单文档MFC程序),则生成的是(类似于Visual Studio 2008 IDE的)具有多个窗格的选项卡式多文档界面的应用程序,参见图3-32,其各功能区本身就支持多种弹出式快捷菜单。

图3-32 具有多个窗格的选项卡式多文档界面的MFC应用程序

39

例如在其左窗格的“文档视图”页和“类视图”页中的快捷菜单(ID值为IDR_POPUP_EXPLORER和IDR_POPUP_SORT)如图3-33 a)和b)所示,在其右窗格的“属性”页中或各窗格的标题条上的快捷菜单如图3-33 c)所示,而在其下窗格的“输出”窗口中的快捷菜单(ID值为IDR_OUTPUT_POPUP)则如图3-33 d)所示,在主窗口的菜单条和工具条及窗格中的工具条上的快捷菜单如图3-33 e)所示,在选项卡子窗口中的编辑快捷菜单(ID值为IDR_POPUP_EDIT)如图3-33 f)所示。

a)

b)

c)

d)

e)

f)

图3-33 默认快捷菜单

复习思考题

1. 与工具条和快捷键相比,菜单有什么优缺点? 2. 菜单可以怎样分类?

3. 菜单项由那些部分构成?省略号和三角形各表示什么? 4. 给出访问键和快捷键的英文和别称。

5. 如何启用访问键和快捷键?如何设置访问键和快捷键? 6. 菜单项ID是什么?有什么用处?定义在哪里? 7. 菜单条属于什么窗口?如何获取该窗口的对象? 8. 菜单条和(弹出)菜单对于什么MFC类?

40


03界面编程1-菜单(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:华中科技大学C语言实验与课程设计上机实验报告汇总(1~8全部)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: