【MFC】Ribbon界面开发(三)

article/2025/9/19 18:41:04

01.目录

目录

      • 01.目录
      • 02.本文内容
      • 03.完善Ribbon实例
        • 3.1 为Ribbon bar 添加更多的Ribbon控件
        • 3.2 为Ribbon控件添加消息处理函数
      • 04.扩展内容(快速访问工具栏)
      • 05.总结

02.本文内容

上一节中讲了为Ribbon Bar添加控件的方法。本节将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数。

消息处理函数,在消息处理机制那节有介绍,忘记了可以去看看。

03.完善Ribbon实例

3.1 为Ribbon bar 添加更多的Ribbon控件

下面我将在原有的基础上添加下拉菜单、Check Box、Combo Box等Ribbon控件。

  1. 首先把“Small Button”面板上的“Click”按钮改造成一个下拉菜单。“Click”按钮有一个Behavior属性Menu Items,默认为Empty,选中它右侧会出现一个浏览按钮,点击浏览按钮会弹出“Items Editor”对话框,如下图:
    在这里插入图片描述
    我们可以在上图Items下的组合框中选择按钮、分割线等,点击组合框右侧的Add按钮将其添加到下拉菜单中,添加按钮后在Properties分组中可以设置Caption(标题)、ID、Image(图片)等属性。这里我们添加两个按钮,Caption属性分别为One Click、Double Click,ID分别为ID_ONE_CLICK、ID_DOUBLE_CLICK,Image等属性就不设置了。

“Click”右侧多了一个向下的箭头,运行程序后点击此箭头会显示包含One Click和Double Click按钮的下拉菜单。另外,上图中有一个按钮鸡啄米用红线指示了其提示信息-“Test Ribbon”,点击了此按钮我们就可以不运行程序而直接查看Ribbon界面效果。

  1. 在Small Button面板的右侧再添加一个面板“More Controls”,然后在Toolbox工具中找到Check Box和Combo Box控件拖入新面板,Check Box的Caption属性设为“Websites Enable”,Combo Box的属性设为“Websites”。效果图如下:
    在这里插入图片描述
    我们为Websites组合框(Combo Box)添加两个下拉选项,方法是,右键点击Websites组合框,选择“Properties”,显示出其属性页,修改Data属性为“www.baidu.com;www.taobao.com”,这样就为此Combo Box添加两个网址选项。

3.2 为Ribbon控件添加消息处理函数

前面控件都添加好了,接下来我们就为控件添加消息处理函数。
步骤如下:

  • 首先为Open按钮添加单击事件的消息处理函数,其ID修改为ID_OPEN_BUTTON,然后右键点击Open按钮,选择“Add Event Handler”,弹出Event Handler Wizard对话框,右侧的Class list中选择“CMainFrame”,左侧的Message Type中选择“COMMAND”,最后点击“Add and Edit”按钮,CMainFrame类中就添加了void CMainFrame::OnOpenButton()成员函数。

熟悉MFC的可能看到了,其实消息处理函数的添加过程与普通控件是类似的。最后修改void CMainFrame::OnOpenButton()函数的函数实现如下:

void CMainFrame::OnOpenButton()   
{   // TODO: Add your command handler code here   MessageBox(_T("Open Button!"));   // 弹出对话框,提示“Open Button!”   
}  

因为只是为了讲解按钮的消息处理函数的添加,所以没有写复杂的代码,只写了一个弹出MessageBox的语句。运行程序,在结果界面的Function类别的Big Button面板中,点击Open按钮就会弹出一个对话框,并显示“Open Button!”。

  • 我们再为Websites组合框添加消息处理函数(方法同上),同样也为其在CMainFrame类中添加COMMAND消息处理函数–void CMainFrame::OnWebsitesCombo(),修改此函数实现如下:
void CMainFrame::OnWebsitesCombo()   
{   // TODO: Add your command handler code here   // 获取Combo Box控件的指针   CMFCRibbonComboBox* pComboBox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, m_wndRibbonBar.FindByID(ID_WEBSITES_COMBO));   // 获取Combo Box控件当前选中项的索引   int nCurSel = pComboBox->GetCurSel();   if (nCurSel >= 0)   {   // 如果索引大于等于0,则说明有选中项,弹出对话框并显示选中项的信息   MessageBox(pComboBox->GetItem(nCurSel));   }   else  {   // 如果索引小于0,则说明没有选中项,弹出对话框提示用户进行选择   MessageBox(_T("Please select one item!"));   }   
}  

运行程序,在结果界面中,改变WebSites组合框的选中项,则会弹出对话框显示选中项的信息。

  • 然后我们为Websites Enable复选框添加消息处理函数。默认情况下Check Box控件不会因为用户的点击而改变状态,这就需要我们通过代码来实现正常的复选功能。
  • 我们需要一个变量保存Check Box的当前选中状态,所以在MainFrm.h文件中为CMainFrame类添加一个BOOL型的成员变量m_bWebsitesEnable,并在CMainFrame类的构造函数中为其初始化:
CMainFrame::CMainFrame()   
{   // TODO: add member initialization code here   theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_OFF_2007_BLUE);   // 初始化为TRUE,即复选框为选中状态   m_bWebsitesEnable = TRUE;   
}  

接下来仍然采用1中的方法为Websites Enable复选框在CMainFrame类中添加COMMAND消息处理函数,并修改其函数体如下:

void CMainFrame::OnWebsitesCheck()   
{   // TODO: Add your command handler code here   // 为m_bWebsitesEnable取反,即切换复选框的状态   m_bWebsitesEnable = !m_bWebsitesEnable;   
}  

但是现在复选框的状态只是保存到了变量中,我们还要根据变量值改变复选框的显示状态,这就需要再为Check Box添加一个UPDATE_COMMAND_UI消息处理函数,方法仍旧是右键点击Check Box,选择“Add Event Handler”,在弹出的Event Handler Wizard对话框的Class list中选择“CMainFrame”,Message type中则选择UPDATE_COMMAND_UI,最后点“Add and Edit”,这样就添加了UPDATE_COMMAND_UI消息处理函数,修改此函数实现如下:

void CMainFrame::OnUpdateWebsitesCheck(CCmdUI *pCmdUI)   
{   // TODO: Add your command update UI handler code here   // 根据当前变量值设置复选框状态   pCmdUI->SetCheck(m_bWebsitesEnable);   
}  

这时你可以试着运行下程序,点击Website Enable复选框,它已经能成功的改变状态了。

  • 除了以上功能,我们还要实现一个稍复杂的功能,就是如果选中Websites Enable复选框则激活Websites组合框,而如果取消选中则禁用Websites组合框。这就需要我们为Websites组合框添加UPDATE_COMMAND_UI消息处理函数了,添加方法同上,这里不再赘述。修改函数实现为:
void CMainFrame::OnUpdateWebsitesCombo(CCmdUI *pCmdUI)   
{   // TODO: Add your command update UI handler code here   // 根据Websites Enable复选框的状态确实激活还是禁用   pCmdUI->Enable(m_bWebsitesEnable);   
}  

运行程序,试着改变Websites Enable复选框的状态,Websites组合框的使能状态也会跟着改变。
最后,再简单讲讲如何为Ribbon Bar左上角的圆形菜单按钮和快速访问工具栏添加新项。

04.扩展内容(快速访问工具栏)

贴上一张图片先看看具体是啥东西。

在这里插入图片描述
圆形菜单按钮的属性页中有一个Buttons属性,可以点击其右侧浏览按钮弹出Items Editor对话框,使用该对话框可以在菜单按钮的弹出菜单窗口中添加右下角的按钮。还有一个Main Items属性,点其右侧浏览按钮也会弹出Items Editor对话框,通过它可以为圆形菜单按钮添加菜单项。

快速访问工具栏的属性页中有一个QAT Items属性,点击其右侧浏览按钮弹出QAT Items Editor对话框,使用该对话框可以在快速访问工具栏中添加新项。

这样,MFC快速访问工具栏也可以添加新的选项了。

05.总结

通过三篇文章的了解,想必对MFC中的Ribbon也算有了一定概念了。
https://blog.csdn.net/m0_43458204/article/details/107184067
https://blog.csdn.net/m0_43458204/article/details/107184964
上面就是前两篇的链接了。
如果有什么疏漏或者错误的地方,请一定要指出来,谢谢大家。
版权声明:部分内容来源网上,若侵权,请私聊!转载请注明出处,谢谢!


http://chatgpt.dhexx.cn/article/IeE6OHNO.shtml

相关文章

MFC入门之 Ribbon界面设计

Ribbon是类似于office2007样 式的界面,它替代了传统的MFC程序里的菜单和工具栏MFC默认生成的Ribbon功能少,需要我们自己添加一些控件和图片等元素使界面好看。看下面的一个界面,是示例里的 看到它与默认Ribbon样式的区别: 工具自己…

DevExpress 设计Ribbon界面

Ribbon上包含以下一些元素,如图所示: 元素对应API: Element Ribbon API Quick Access ToolbarRibbonControl.Toolbar RibbonQuickAccessToolbar.ItemLinksApplication ButtonRibbonControl.ShowApplicationButton RibbonControl.Application…

Ribbon界面1

收费工具,一百大洋。学生党勿扰。 1 概述 应客户要求,写了一个Ribbon风格的界面。 2 截图

Ribbon界面2

1 概述 Qt实现的Ribbon界面。 2 截图 office2003风格 office2003风格 office2005风格 office2005风格 office2013风格

Ribbon界面开发(C++)

一.简介 Ribbon:固定式工具栏界面,能够使用户更容易地使用 软件的各项常用功能,例如Word 2007中的保存,设置格式,插入图片等常用功能,都可以从Ribbon界面快速地访问到,从而提高用户的生产效率 二.项目创建 1&#x…

Ribbon界面介绍

http://hi.baidu.com/hoping/item/b257e10e99ed7312cd34ea1d Ribbons Ribbon是现代化的方式帮助用户高效和直接的查找、理解和使用工具命令——通过最少的点击,减少从“尝试-错误”(trainl-and-error)方式中恢复操作,寻找新的操作…

C#编程--ribbon界面介绍

1.梗概 最近在做一个编辑器,刚开始做两天,C#新手。觉得ribbon界面非常好看,不过网上资料非常之少。今天把这两天所学的做一下总结:一是希望能给后来者缩短入门时间。二是对这几天所做的内容进行汇总。(内容可能会有繁…

zz:保护眼睛的颜色和各种背景颜色设置方法

zz: http://tiaozhanshu.com/others/color-for-eye-protection/ 眼睛最近又疼了,无论远近都看不清楚。以前出现这种情况去医院查,医生还说我已经过了得近视的年纪,就算受到一般的刺激也不容易发生病变了。但是长期对着电脑最怕看见…

护眼色(RGB值)

为什么80%的码农都做不了架构师?>>> 护眼色:类似于绿豆沙的颜色; 色调:85;饱和度:123;亮度:205, R: 199; G: 237; B:204; 转载于:htt…

win10窗口设置眼睛保护色

经常电脑前坐着,习惯了豆沙色窗口(据说保护眼睛); 目标 记事本,ide,office等窗口颜色豆沙色;如下图 步骤 打开注册表:winr 运行“regedit”;依次打开[HKEY_CURRENT_USE…

win10 如何设置眼睛保护色(绿色)

按WindowsR打开运行窗口 3 输入Regedit进入注册表编辑器。 4 进入计算机\HKEY_CURRENT_USER\Control Panel\Colors找到window 5 双击打开窗口。 6 将数值改成 204 232 207 点击确定。 7 重启电脑,打开系统窗口即可看到背景成绿色了。

设置电脑眼睛保护色 多种颜色可选!

绿豆沙色能有效的减轻长时间用电脑的用眼疲劳! 色调:85,饱和度:123,亮度:205; RGB颜色红:199,绿:237,蓝:204; 十六进制颜色…

电脑眼睛保护色设置

眼科医生建议电脑屏幕不要用白色,因为白色对眼睛的刺激是最大的,最损伤视力! 眼科医生推荐的颜色是柔和的淡绿色,也有人叫做绿豆沙色。 按HSU 设置为: 色度(HUE): 85 饱和度(SAT): 123 亮度…

保护眼睛的颜色和各种背景颜色设置方法(转)

保护眼睛的颜色 现代人几乎每天都离不开电脑。在工作、娱乐、交友、购物,甚至在买卖股票的过程中,电脑都是我们的好帮手。但是,电脑的辐射多对眼睛的伤害很大,而许多应用软件的背景,尤其是网页的底色通常被设定为白色…

配置护眼颜色

配置护眼颜色如下: 色调:85;饱和度:123;亮度:205, R: 199 ; G:237;B:204。如下图所示: R:204 G:232 B:207。3、电脑设置护眼模式方式…

安卓手机解锁:Device is locked. Please unlock the device first

Device is locked. Please unlock the device first 在安卓P的手机上如果adb remount 不上手机并且报如上的错的话,就需要对手机进行解锁。 1.首先需要打开开发者模式中的OEM unlocking开关 2.adb reboot bootloader 3.fastboot flashing unlock 4.fastboot getva…

IP is locked 的解决办法 Vivado

IP is locked (IP核被锁定) 发生IP核锁定,一般是Vivado版本不同导致的,当用新版本打开老版本的project时,会出现下面IP核被锁的情况,下面介绍两种方法解决IP核被锁的方法: IP is locked 的解…

svn locked 怎么解决

导致原因:更新代码时候,强制终止 解决方法: 回到SVN文件夹的根目录。如图操作: 点击ok就好了。

Oracle账户被锁:the account is locked

Oracle账户被锁:the account is locked 小编同学今天在和小伙伴们安装Oracle数据库时,出现了几个比较常见的问题,比如:scott账户未解锁:ERROR:ORA-28000:the account is locked。 错误描述 1.在Oracle中&#xff…

PLL中的locked信号解析

转自:http://www.360doc.com/content/13/0509/20/9072830_284220258.shtml 今天对PLL中areset和locked详细查了下资料,发现网上这方面的资料很少,所以自己认真读了下Documentation---ug_altpll.pdf,现在我将我学到的内容总结如下:…