CMFCRibbonBar及其他Ribbon类的使用

MFC开发工具入门:Ribbon设计器详解 Designer 允许您轻松地为实际应用程序创建模型。它以现有的 MFC 项目作为输入,并生成 Ribbon 元素的 XML 表示以及作为输出的 RC 文件。当设计器的部分工作完成后,您只需编译项目,运行并查看设计的 Ribbon 控件的运行情况。 MFC界面开发必备库: Xtreme Toolkit Pro:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart 阅读详情
AI摘要

本文介绍如何在Visual Studio 2008中实现类似Office 2007的Ribbon界面,并提供了详细的步骤指导,包括创建Ribbon Bar、添加按钮及类别等操作。

在VS2008 SP1中有很炫的类似OFFICE07的Ribbon主题“菜单”,研究了2天,总结下。

参考资料:msdn

视频:微软的1  2

 基本资源和类如图:

继承图为:图中标注的是常用的几个类

 

 

 

 

 

用法:

1   接着添加CMFCRibbonBar

.h中声明

CMFCRibbonBar     m_wndRibbonBar;
.cpp中
m_wndRibbonBar.Create(this);

 

 

 

 

此时得到的是一个空白的Bar

 

2   最大的那个button

 

.h中声明

CMFCRibbonApplicationButton m_MainButton;

 

.cpp中

 

m_MainButton.SetImage(IDB_MAIN);
m_MainButton.SetText(_T("/nf"));
m_MainButton.SetToolTipText(strTemp);
CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);//大按钮点击后出现的panle
//这里有32×32 和16×16两种位图资源 分别提供按钮的大小 两种图标

 

 

 

 

然后通过

pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, _T("按钮1"), 0, 0));//添加大按钮点击后出现的panle上的按钮

 

 

3   添加Category

.cpp中

//每个TAB就相当于一个Category,分别添加就可以  很简单
 
CMFCRibbonCategory *pCategory = m_wndRibbonBar.AddCategory(_T("Button"),
IDB_FILESMALL,IDB_FILELARGE);
CMFCRibbonPanel* pPanel = pCategory->AddPanel(_T("Large Button"));
CMFCRibbonButton* pButton;
pPanel->Add(new CMFCRibbonButton(ID_BUTTON_BUTTON1,_T("Button"),0,0));
pButton = new CMFCRibbonButton(ID_BUTTON_BUTTON2,_T("Menu Button"),1,1);
pButton->SetMenu(IDR_MAINFRAME);
pPanel->Add(pButton);
pButton = new CMFCRibbonButton(ID_BUTTON_BUTTON3,_T("Splitter Menu Button"),2,2);
pButton->SetMenu(IDR_MAINFRAME,TRUE);
pPanel->Add(pButton);

 

 

另外按钮要必须指定事件才可以是enable的状态,可以用

ON_COMMAND_RANGE(ID_BUTTON_BUTTON2, ID_BUTTON_BUTTON9,&CMFCCategoryDemoView::OnButtonButton)


 

 

 =====================================

在新的vs2010里 这些界面已经可以直接可视化编辑了 Resource View ----Ribbon-IDR_RIBBON

 

 =====================================

获取RibbonBar相关控件指针的方法:

 

CMainFrame *pMainFrame = (CMainFrame *)AfxGetApp()->m_pMainWnd;

ASSERT_VALID(pMainFrame);

//获取RibbonBar指针
CMFCRibbonBar *pRibbonBar = pMainFrame->GetRibbonBar();
ASSERT_VALID(pRibbonBar);
//获取RibbonComboBox控件指针
CMFCRibbonComboBox *pCombox = DYNAMIC_DOWNCAST(CMFCRibbonComboBox, pRibbonBar->FindByID(uiCmdID));

//使用……
pCombox->AddItem(lpszItem);

 

 

 

 

 

 =================================================

更新下改变CMFCRibbonStatusBar里CMFCRibbon元素文字颜色的方法

先看效果图

第一个是默认的CMFCRibbonButton的默认字体颜色

第二个是修改之后的CColorRibbonButton的默认字体颜色,与ribbon主题相符

方法是从CMFCRibbonButton派生出CColorRibbonButton,然后改写虚函数。DrawRibbonText代码如下

 

class CColorMFCRibbonBT  : public CMFCRibbonButton 
{
public:
	CColorMFCRibbonBT(UINT nID, LPCTSTR lpszText);
	
	~CColorMFCRibbonBT();
public:
	int DrawRibbonText(CDC* pDC, const CString& strText, CRect rectText, UINT uiDTFlags, COLORREF clrText = (COLORREF)-1);

protected:
private:
};

 

CColorMFCRibbonBT::CColorMFCRibbonBT(UINT nID, LPCTSTR lpszText ):CMFCRibbonButton(nID,lpszText)
{

}
CColorMFCRibbonBT::~CColorMFCRibbonBT()
{
}

int CColorMFCRibbonBT::DrawRibbonText(CDC* pDC, const CString& strText, CRect rectText, UINT uiDTFlags, COLORREF clrText )
{
	ASSERT_VALID(this);
	ASSERT_VALID(pDC);
	uiDTFlags = DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS;
	
	
	clrText = afxGlobalData.clrBarText;
	
	return CMFCRibbonButton::DrawRibbonText(pDC, strText, rectText, uiDTFlags, clrText);
}


应用的时候

 

 

AddElement(new CColorMFCRibbonBT(ID_STATUSBAR_LOGNAME,_T("当前登录账号为:")),_T("当前登录账号"));


就可以了

 

 =====================================================

更改ribbon里的字体有很简单的方法就是

 

m_wndRibbonBar.SetFont(&g_Font);


另外添加ribbon按钮的时候,自定义的tooltips经常显示不出来,研究了一下,原来还是有点诀窍的,方法如下:

 

1.添加ribbon按钮之后,设置属性prompt,这个prompt是tooltips的详细说明。

2.在代码里mainfrm初始化的时候,设置一个tooltips的大纲说明

 

m_wndRibbonBar.FindByID(ID_RIBBON_BUTTON_SIMPLEQUERY)->SetToolTipText(_T("简单查询"));

运行的时候效果如下图


如果我的文字解决了你的问题,请打个赏的,让我更有动力:)

【MFC】Ribbon界面开发(三) 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 阅读详情

相关推荐

MFC Ribbon下禁用状态栏CMyRibbonBar右键,快速访问工具(CMFCRibbonQuickAccessToolBar),关闭ApplicationButton响应

1、禁用CMyRibbonBar右键 新建CMyRibbonBar 类,继承CMFCRibbonBar,重载OnShowRibbonContextMenu。//屏蔽CMFCRibbonBar中的右键菜单,重载OnShowRibbonContextMenu(); class CMyRibbonBar : public CMFCRibbonBar { protected: virtual BO

小七的小世界 4511

MFC - Ribbon学习

office分格的Ribbon工具栏比WindowsXP分格工具栏漂亮很多。现在开发一个程序Ribbon风格(基于单文档)的程序,由于没接触过走了不少弯路,记录一下备忘。

wu_zhiyuan的博客 2392

MFC实现Ribbon界面(附完整源码)

MFC实现Ribbon界面(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 883

MFC Ribbon定制方法一则

本文代码来自Adding New Theme Variations to the MFC Ribbon (CMFCVisualManager) - CodeProject 下面的主要类代码出自上述文章,涉及权力由该作者所有 1. 头文件 MFCVisualManagerDeviant.h #pragma once // CMFCVisualManagerDeviant command target class CMFCVisualManagerDeviant : public CMFCVisu

捕鲸叉的专栏 1032

深入理解VS2012中CMFCRibbonBar的动态创建

在现代软件开发中,Microsoft Foundation Classes(MFC)作为微软推出的C++库,是构建Windows应用程序的重要框架。MFC封装了许多Windows API,并提供了一套面向对象的编程模型,这使得程序员能够快速开发出功能丰富、界面友好的应用程序。VS2012提供了对MFC的全面支持,是进行MFC开发的理想环境。

weixin_36304957的博客 1145

VS2012编写CMFCRibbonBar动态创建

动态创建CMFCRibbonBar,包含有CMFCRibbonButton、CMFCRibbonCheckBox等,CMFCRibbonCombox等的使用类似

CMFCRibbonBar

1、CMFCRibbonBar 删除 自定义中的类别。2、删除无关的类别1分隔符。

Ma_Hong_Kai的博客 54

在树莓派5(8G版)上运行Ollama + LLM

直接上结论,Ollama在树莓派上能安装,且本身运行起来毫无压力,但具体到大语言模型,Deepseek似乎不总是最佳选择。

ki1381的专栏 1651

关于Ribbon界面 和 一些使用方法

1:在vc6中用一些外部库就可以实现Ribbon界面,如toolkit,但是很麻烦,而且库是收费的,当然网上有很多免费的; 2:在vc2008中可以用代码添加设计Ribbon界面,依然很麻烦; 3:在VC2010中,添加了可视化编辑Ribbon界面,包括响应消息的添加,这样就方便很多了,比菜单还方便直观,同时可以用代码设计更为复杂的界面;   很多具体方法可以查看MSDN,这里例举常用的。

路楷的专栏 9031

几款支持国标GB28181的平台以及视频监控设备接入的配置方法(Web端无插件播放)

GB28181解决的一个主要问题就是如何远程、跨网络、跨区域、跨级别的访问网络中的监控设备(包括IPC、NVR等),本文介绍几款G28181平台的接入配置方法,适合有监控视频摄像头的远程接入和预览需求的人群参考使用。

一名高级工程师的博客 1万+

图像去畸变(相机成像、畸变模型)

首先通过上一步相机标定得到畸变参数和相机内参,同时,由于图像去畸变都是在归一化相机坐标系下进行的,而图像都是像素坐标,所以需要先通过相机内参矩阵将图片上的像素点从像素坐标系转变到归一化坐标系,再通过畸变参数在归一化坐标上进行去畸变的操作。由于畸变是发生在世界点通过透镜投影到相机坐标系这个过程中的,所以去畸变操作是在相机坐标系下进行的。(如图,Pd即为畸变后成像点)3.读取图像和各个参数,调用去畸变函数(opencv自带的cv.undistort函数),就可以完成对图像的去畸变处理,进而得到去畸变的图像。

lm5688jjupm1n28的博客 1051

关于MFC Ribbon界面下禁用状态栏右键菜单功能

1.新建CMyRibbonBar 类,继承CMFCRibbonBar,重载OnShowRibbonContextMenu。 2.在MainFrm.h中添加此头文件并将默认已经定义的对象进行修改 搞定!!

weixin_45365538的博客 606

车载仪表-功能点测试大全(超详细,细分可作测试用例)

汽车仪表系统发展经历了机械式、电气化到智能化的演变,目前全液晶仪表渗透率达73.4%。文章详细梳理了仪表功能测试要点,包括UI界面显示一致性、按键响应、FM收音、信号灯显示、USB功能、蓝牙连接、胎压监测、导航系统、WiFi投屏、倒车影像及多媒体播放等关键功能模块的测试标准。特别关注界面切换流畅度、功能稳定性及异常情况处理能力,如投屏状态下是否卡顿、导航中断后能否自动恢复等。测试覆盖了CarPlay、AndroidAuto等主流投屏方案的兼容性验证,确保各类交互场景下的系统可靠性。

weixin_51551002的博客 2064

MFC之CMFCRibbonBar的使用,使用华丽的Ribbon界面

MFC之CMFCRibbonBar的使用,使用华丽的Ribbon界面 ———————————————————————————————————————— working on it... ———————————————————————————————————————— Good Luck!!!! 转载于:https://www.cnblogs.com/watsonlong/arc...

weixin_30588729的博客 465

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

正版63棋牌源代码游戏+728游戏全套带前端源代码解析

这俩天抽时间仔细看了一下这套项目包含完整的前端、后端及后台管理系统。从上传的截图可以看出,前端基于资源目录,后端采用和,后台管理界面提供数据查询与管理功能。本篇文章将从前端结构、后端接口、数据库设计、常见 BUG 及优化方法等方面逐步拆解,并给出相应的代码示例和实践经验。

aa2031171的博客 3573

CMFCRibbonBar hide QuickAccessToolbar

CMFCRibbonBar隐藏快速访问工具栏。

walkereklaw的博客 789

[数学建模][2012年A国赛模拟] 3. 葡萄酒的评价

暑期学校数学建模培训第三次模拟:2012年国赛A题,一道完全统计方面的题目。据老师反映当年有位老师所带领小组取得“全国10佳优秀论文奖”,我们大组搞统计的老师建模能力不行,但其统计理论非常扎实,在此期间给予我们非常大的帮助,十分感谢老师的倾囊相授。我们小组的定位也不在统计方向,主攻物理建模及优化模型,故本次模拟就用SPSS软件简单做了下,还是学到了多元统计的许多知识,达到了本次训练的目的。 ...

Y-puyu 的博客 3万+

CMFCRibbonBar 类别 显示 隐藏

CMFCRibbonBar::ShowCategory 显示或隐藏指定的功能区类别。 void ShowCategory( int nIndex, BOOL bShow=TRUE ); 参数 [in] nIndex 功能区类的索引。 [in] bShow 如果 TRUE,显

cvbtvbwu的专栏 4927

【MATLAB代码】蚁群算法(Ant Colony Optimization, ACO)路径规划(避障)仿真程序,订阅专栏后可直接查看完整源代码

基于蚁群算法的路径规划系统。可自定义起点、终点和障碍物地图,系统通过蚁群算法自动计算最优路径,并输出路径坐标、障碍物地图和收敛曲线。完整MATLAB源代码直接运行。适用于复杂障碍环境下的路径优化问题。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 3091

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

改变CMFCRibbonBar高度

本文作者:无幻 测试环境:Windows XP 开发环境:Visual Studio 2010       要改变CMFCRibbonBar的高度,需要重载CalcFixedLayout函数,例如如下: 头文件: #pragma once ////////////////////////////////////////////////////////////////////////

无幻 9182

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MFC之Ribbon

//可以在MFC应用程序中使用Ribbon资源,在程序初始化时进行 CMFCRibbonBar m_wndRibbonBar; if(!m_wndRibbonBar.Create(this)) { return -1; } if(!m_wndRibbonBar.LoadFromResource(IDR_RIBBON)) { return -1; } //视图类对象的作用是在客户区显示文档类

lniwn 3045

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

CMFCRibbonBar 实现一个功能区条类似于 Office的2007

本文由 代码助手软件 整理发布 内容与本软件无关 更惬意的读、更舒心的写、更轻松的发布 CMFCRibbonBar 实现一个功能区条类似于 Office的2007。 protected: // 控件条嵌入成员     CMFCRibbonBar     m_wndRibbonBar; int CMainFrame::OnCreate(LP

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 2682

CMFCRibbonBar 获得最小化状态

Ribbon工具条的有个最小化的功能,我做了个按钮,想根据Ribbon是否最小化,改变下状态,可是怎么获得这个状态呢。 CMFCRibbonBar::ToggleMimimizeState()只能切换正常和最小化状态,按正常思维应该是有个类似IsMinimized()这种函数, 但是,不好意思,没有!找了半天,有这么一个函数: GetHideFlags,返回值: 0:正常1(AFX_R

1867

为早期项目添加Ribbon界面

 本文转自:http://blog.youkuaiyun.com/shuilan0066/article/details/42196521 如果新建一个Ribbon项目,然后将老项目一一拷贝过去,那未免也太麻烦了。        因此,要是能将老项目直接修改成Ribbon界面,那自然是更好的选择咯。        通过对比测试,给出以下解决方案: 首先,添

优快云Microsoft优快云的专栏 3604
上一篇: List Control里插入ICO图标及行背景色交替改变
下一篇: CUDA在联想T61 Quadro 140M显卡上安装DevDriver
洗洗睡去
博客等级 码龄19年 277粉丝 90原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值