科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual C++.NET编程讲座之四

Visual C++.NET编程讲座之四

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本讲详细讨论了如何用资源编辑器对菜单和工具栏进行可视化设计....

作者:丁有和 来源:yesky 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
工具栏的显示和隐藏的快捷方式实现

  在图12中,关闭浮动的"格式"工具栏后,若再显示该工具栏则无法进行,为此我们需要添加相关的控制代码。这里我们先来介绍菜单命令的控制方式,然后再说明其他的快捷方式。

  1. 菜单命令方式

  所谓菜单命令方式,即使用菜单命令来显示和隐藏指定工具栏。需要解决的问题有两个,一是显示和隐藏指定工具栏的函数是什么?二是如何实现菜单项前面的显示状态的更新。所谓显示状态,即当工具栏显示时,该菜单项前面有一个"a",否则什么都没有。

  对于第一个问题,我们可以使用CFrameWnd类的成员函数ShowControlBar()来进行,它的原型如下:

void ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay );

  其中,pBar用来指定要操作的控制条指针,bShow为TRUE时表示显示,否则表示隐藏,bDelay表示是否延迟显示或隐藏,当为FALSE时表示立即显示或隐藏。

  对于第二个问题,可以通过映射宏ON_UPDATE_COMMAND_UI来实现菜单项和工具栏按钮状态的改变。下面就来实现。

  (1) 在"视图"菜单中添加一个菜单项"格式工具栏(&F)",ID为ID_VIEW_FORMAT。如图13所示。


图13 在"视图"中添加的菜单项

  (2) 在CMainFrame类中添加一个成员变量m_bViewFormat,变量类型为BOOL。该变量用来决定新添加的"格式"工具栏是否显示。

  (3) 在CMainFrame类的构造函数处,将m_bViewFormat的初值由原来的FALSE改为TRUE。

  (4) 在CMainFrame类中分别添加菜单项ID_VIEW_FORMAT的COMMAND和UPDATE_COMMAND_UI事件映射,并在映射函数添加如图14所示的代码。


图14 添加的代码

  程序说明:

  ① CCmdUI类是专门用于交互对象的更新操作,其成员函数Enable()用来使交互对象有效(参数为TRUE)或无效(参数为FALSE),若不指定参数,使用默认的参数值TRUE。

  ② CCmdUI::SetCheck()用来设置交互对象状态是"选中"(参数为TRUE)还是"未选中"(参数为FALSE)。当"选中"时,SetCheck()在菜单项文本前面加上"a"。

  (5) 运行程序。

  2. 快捷键方式

  快捷键用于那些反复使用的菜单命令或工具按钮命令,当用户执行命令时只要接相应的快捷键即可。下面来添加并使用快捷键。

  (1) 将解决方案资源管理器窗口切换到"资源视图",展开Accelerator,双击IDR_MAINFRAME,出现如图15所示的快捷键资源内容。


图15 快捷键资源

  需要说明的是,在Visual C ++ .NET中,每一个快捷键除了ID外,还有三个属性:修饰符、键和类型。"修饰符"属性用来设置的快捷键是与Alt、Ctrl和Shift的哪一个或几个控制键组合。"键"属性用来设置使用的键。"类型"属性是用来确定键是解释为虚拟键(VIRTKEY)还是解释为ASCII/ANSI。

  (2) 单击最下端的空白方框,出现默认的快捷键资源,如图16所示。


图16 添加的默认快捷键资源

  (3) 单击ID_ACCELERATOR32776后,该ID字段变成了一个组合框。在这里,我们既可以自己定义一个资源标识,也可以单击右侧的下拉按钮,从中选择一个已有的资源标识。一旦指定了标识,快捷键就与该标识关联起来,这样当按快捷键时就会执行与标识相对应的命令。我们选择前面的菜单标识ID_VIEW_FORMAT。

  (4) 单击Ctrl,从中选择可以使用的控制键,单击"键"字段可以选择相应的虚拟键,或直接输入字符,表示相应的字符键。按图17来设置。


图17 设置的快捷键

  (5) 程序运行后,先按住Ctrl,然后再按1键,就可以显示或隐藏格式工具栏了。

  需要说明的是,为了使用户能看到各菜单项所对应的快捷键,我们应该在各菜单项的文本后加上快捷键的内容。例如,在将菜单项ID_VIEW_FORMAT的文本内容改成"格式工具栏(&F)\t Ctrl+1",其中的"Ctrl+1"表示该菜单项的快捷键,"\t"用来将其后面的内容在下一个水平制表位置中显示。

  3. 快捷菜单方式

  工具栏的显示和隐藏的快捷方式最常用的是使用快捷菜单。所谓快捷菜单,它是一种浮动的弹出式菜单,当用户右击鼠标时,就会相应地弹出一个浮动菜单,其中提供了几个与当前选择内容相关的菜单命令。

  (1) 在CMainFrame类的属性窗口中,单击"消息"按钮,在列表框中找到并添加WM_CONTEXTMENU消息的映射。如图18所示。


图18 添加WM_CONTEXTMENU消息映射

  (2) 在映射函数OnContextMenu()中添加代码,如图19所示的加框部分。


图19 在OnContextMenu()中添加的代码

  需要说明的是:

  ① 在MFC中,AFX_IDW_DOCKBAR_TOP和AFX_IDW_DOCKBAR_FLOAT之间的值用来标识工具栏的停靠和浮动的窗口,而AFX_IDW_PANE_FIRST是标识第一个视图窗口,由于单文档的视图只有一个,因此它的标识就是该值。

  ② GetMenu是用来获取指定菜单下的弹出子菜单,参数的值表示子菜单在主菜单中的位置序号,0时表示第1个子菜单,1时表示第2个子菜单,以此类推。

  ③ TrackPopupMenu()用来弹出一个快捷菜单,第一个参数用来表示菜单在屏幕显示的位置以及鼠标按钮标志,当为TPM_LEFTALIGN时表示菜单的左边位置由第二个参数确定,TPM_RIGHTBUTTON表示用户单击鼠标右键时弹出菜单,最后一个参数表示弹出菜单的父窗口。this是当前对象指针,每个类对象均有这个指针。

  (3) 运行程序。图20是两次不同位置右击时弹出的快捷菜单。


图20 快捷方式运行结果
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章