改变CMFCRibbonBar高度

article/2025/10/19 3:52:14
本文作者:无幻
测试环境:Windows XP
开发环境:Visual Studio 2010

      要改变CMFCRibbonBar的高度,需要重载CalcFixedLayout函数,例如如下:

头文件:

#pragma once//
// CKofMFCRibbonQuickAccessToolBarclass CKofMFCRibbonQuickAccessToolBar : public CMFCRibbonQuickAccessToolBar
{friend class CKofMFCRibbonBar;
};//
// CKofMFCRibbonBarclass CKofMFCRibbonBar : public CMFCRibbonBar
{DECLARE_DYNAMIC(CKofMFCRibbonBar)public:CKofMFCRibbonBar(BOOL bReplaceFrameCaption = TRUE);virtual ~CKofMFCRibbonBar();protected:virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);DECLARE_MESSAGE_MAP()
};
实现文件:
#include "stdafx.h"
#include "KofMFCRibbonBar.h"static const int nXTabMargin = 14;
static const int nYTabMargin = 5;static const int nXMargin = 2;
static const int nYMargin = 2;
//
// CKofMFCRibbonBarIMPLEMENT_DYNAMIC(CKofMFCRibbonBar, CMFCRibbonBar)CKofMFCRibbonBar::CKofMFCRibbonBar(BOOL bReplaceFrameCaption /*= TRUE*/)
: CMFCRibbonBar(bReplaceFrameCaption)
{
}CKofMFCRibbonBar::~CKofMFCRibbonBar()
{
}BEGIN_MESSAGE_MAP(CKofMFCRibbonBar, CMFCRibbonBar)
END_MESSAGE_MAP()CSize CKofMFCRibbonBar::CalcFixedLayout( BOOL bStretch, BOOL bHorz )
{ASSERT_VALID(this);CClientDC dc(this);CFont* pOldFont = dc.SelectObject(GetFont());ENSURE(pOldFont != NULL);TEXTMETRIC tm;dc.GetTextMetrics(&tm);//“标题”的高度m_nCaptionHeight = 0;if (m_bReplaceFrameCaption){m_nCaptionHeight = GetSystemMetrics(SM_CYCAPTION) + 1;if (afxGlobalData.DwmIsCompositionEnabled()){m_nCaptionHeight += GetSystemMetrics(SM_CYSIZEFRAME);}}int cy = 0;CSize sizeMainButton = m_sizeMainButton;double scale = afxGlobalData.GetRibbonImageScale();if (scale > 1.){sizeMainButton.cx = (int)(.5 + scale * sizeMainButton.cx);sizeMainButton.cy = (int)(.5 + scale * sizeMainButton.cy);}if (m_dwHideFlags & AFX_RIBBONBAR_HIDE_ALL){cy = m_nCaptionHeight;}else{if (m_bRecalcCategoryHeight){m_nCategoryHeight = 0;}//“选项卡”的高度m_nTabsHeight = tm.tmHeight + 2 * nYTabMargin;if (m_bRecalcCategoryHeight){for (int i = 0; i < m_arCategories.GetSize(); i++){CMFCRibbonCategory* pCategory = m_arCategories [i];ASSERT_VALID(pCategory);m_nCategoryHeight = max(m_nCategoryHeight, pCategory->GetMaxHeight(&dc));}m_bRecalcCategoryHeight = FALSE;}CKofMFCRibbonQuickAccessToolBar *pQAToolbar = (CKofMFCRibbonQuickAccessToolBar *)&m_QAToolbar;const CSize sizeAQToolbar = pQAToolbar->GetRegularSize(&dc);if (IsQuickAccessToolbarOnTop()){m_nCaptionHeight = max(m_nCaptionHeight, sizeAQToolbar.cy + (IsWindows7Look() ? 0 : (2 * nYMargin)));}//“快速访问工具栏”的高度const int nQuickAceesToolbarHeight = IsQuickAccessToolbarOnTop() ? 0 : sizeAQToolbar.cy;//“分类”的高度const int nCategoryHeight = (m_dwHideFlags & AFX_RIBBONBAR_HIDE_ELEMENTS) ? 0 : m_nCategoryHeight;cy = nQuickAceesToolbarHeight + nCategoryHeight + max( m_nCaptionHeight + m_nTabsHeight, m_sizeMainButton.cy + nYMargin);}if (afxGlobalData.DwmIsCompositionEnabled()){if (GetParent()->IsZoomed() && m_bReplaceFrameCaption){cy += ::GetSystemMetrics(SM_CYSIZEFRAME) - 2;}}dc.SelectObject(pOldFont);return CSize(32767, cy);
}
在MainFrm.h文件里面修改如下:
#include "KofMFCRibbonBar.h"class CMainFrame : public CMDIFrameWndEx
{//...
protected: //CMFCRibbonBar m_wndRibbonBar;CKofMFCRibbonBar m_wndRibbonBar;
}
这样子,运行结果还是原样,如下图所示:

现在试着改变高度,修改上面的代码,改动82行为如下:

m_nCategoryHeight = max(m_nCategoryHeight, pCategory->GetMaxHeight(&dc) + 80); 
改动98行为如下:
const int nCategoryHeight = (m_dwHideFlags & AFX_RIBBONBAR_HIDE_ELEMENTS) ? 0 : m_nCategoryHeight + 20
重新编译运行,效果如下图所示:




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

相关文章

Cocos2d-x 2.0.1 学习tests示例(一)Manual Transformation

作者&#xff1a;无幻 博客&#xff1a; http://blog.csdn.net/akof1314 初学Cocos2d-x&#xff0c;如文章有错误之处&#xff0c;欢迎指出 从上次《Cocos2d-x 2.0 从HelloWorld入手》&#xff0c;继续学习tests示例。 1.右键点击“Solution ‘cocos2d-win32.vc2008’"&…

Unity3d好东西应该被看见_分享一个Assetbundle分析工具

关于Assetbundle分析 很多年前获得过搜狐畅玩的代码 不确定是不是腾讯流出版本&#xff0c;反正经历了深圳畅玩&#xff0c;到北京畅玩。 整个中国地图&#xff0c;从南到北&#xff0c;成熟的Unity手游团队&#xff0c;手上几乎都是那一份ASSETBUNDLE处理代码 功能太多&am…

Visual C++ 2008 Feature Pack 示例截图

Visual C 2008 Feature Pack 示例截图 by 无幻 百度文库&#xff1a;http://wenku.baidu.com/view/f09e5575a417866fb84a8eb6.html 豆丁文档&#xff1a;http://www.docin.com/p-55873972.html CSDN下载&#xff1a;http://download.csdn.net/source/2380293 动态图片显示…

CRichEditCtrlEx支持静态表情聊天类的使用

本文作者&#xff1a;无幻 博客地址&#xff1a;http://blog.csdn.net/akof1314 平时我们在做IM聊天之类的软件的时候&#xff0c;一般都会使用Rich Edit控件来作为聊天编辑框和聊天记录框的控件&#xff0c;在之前的VC知识库看过《类似 MSN 信息发送框的制作(上)》、《类似 MS…

方舟服务器文件夹,方舟生存进化文件夹里哪个才是打开游戏 | 手游网游页游攻略大全...

发布时间&#xff1a;2016-04-07 有许多玩家反映在方舟生存进化当中自己在洞穴里只能挖到石头,挖不到水晶,这是怎么回事呢?接下来小编就为大家带来方舟生存进化在洞穴里怎么才能采集到水晶的详细攻略. 答:用铁镐挖才能采集到水晶,用石镐就只能采到石头,希望能帮到 ... 标签&am…

【VC学习】VC2010 Windows Media Player控件的使用技巧

声明&#xff1a;以下博客基于无幻 VC2008 Windows Media Player控件的使用技巧&#xff0c;自行学习整理 附上原地址&#xff1a;http://blog.csdn.net/akof1314/article/details/4900040 本是跟着老师选修课学习&#xff0c;编程都是基于MFC&#xff0c;手动在toolbox里面修…

真Unity3d_分享一个编辑器扩展模型预览视图Mesh Preview Inspector窗口

预览窗口 在 Unity 编辑器界面上可以看到除了 Game 视图、Scene 视图,其他的视图也会出现绘制三维物体的地方,比如检视器的预览窗口,当选中网格时,会对网格进行预览,如下所示: 预览窗口是UnityEditor的底层框架 UnityEditor框架图 可看我之前的博客: https://blog.c…

lookup

这里注意数组 1.{ sum((E3:E11)*(F3*F11) )} 代表数组运算ctrlentershift&#xff0c;因为(E3:E11)*(F3*F11)返回的是数组 2. sum(E3:E11)其中E3:E11也是数组但是直接enter就可以‘ 为什么&#xff1a;因为(E3:E11)是本来就存在的列&#xff0c;(E3:E11)*(F3*F11)是运算出来…

access Dlookup的值写入表

目的 写入供应商名称&#xff0c;自动弹出供应商代码&#xff0c;然后将该条记录增加到表中 方法 在供应商名称的属性表写&#xff0c;不是供应商代码的属性表 在事件过程中写入- Private Sub 供应商名称_AfterUpdate() Me.供应商代码.Value DLookup(“供应商代码”, “Q_…

access-vba之用户登录窗口

界面截图如下: 创建一个窗体设计,然后在设计中找到控件 因为科室更新,带来了用户的更新,所有用户的行来源不指定,但科室的行来源要指定 最后,我们通过VBA实现用户的行来源,这样可以保证在科室变化的情况下,用户实时显示每个科室的人员 Private Sub keshi_AfterUpdate(…

Excel函数公式大全—LOOKUP函数

EXCEL系列文章目录 Excel系列文章是本人亲身经历职场之后萌发的想法&#xff0c;为什么Excel覆盖如此之广&#xff0c;几乎每个公司、学校、家庭都在使用&#xff0c;但是它深藏的宝藏功能却很少被人使用&#xff0c;PQ、BI这些功能同样适用于数据分析&#xff1b;并且在一些需…

Dev的searchLookUpEdit

新添加的searchLookUpEdit的Text属性值为[EditValue is null]&#xff0c;并且无法直接通过修改Text属性来修改&#xff0c;而是可以通过修改它的Properties.NullText属性来修改&#xff0c;比如将该属性赋值为空&#xff0c;则为如下效果&#xff1a; searchLookUpEdit1.Prop…

LOOKUP函数10种经典用法

转载 https://mp.weixin.qq.com/s?__bizMzI0NzA5MTAyNg&mid2653352337&idx1&sn7494ca76ddf66483d8961f84fdbc958e&chksmf2670bacc51082baa65caa5f9af84e2f2121d635a16be1e9fd9557c6d8c68a5fe17bf90a4ce8&scene27 案例1:按照销售金额区间查询提成比例 此法…

LOOKUP函数

数值可升序&#xff1a; lookup&#xff08;查找值&#xff0c;查找区域&#xff0c;返回值&#xff09; lookup&#xff08;查找值&#xff0c;查找区域返回值B2&#xff09; B2的 第一列为查找区域&#xff0c;最后一列返回值 https://wenku.baidu.com/view/ddce993ae45c3b35…

ChatGPT 总结VLOOKUP,LOOKUP,HLOOKUP,XLOOKUP用法与区别

很多人一直都没明白Excel中VLOOKUP&#xff0c;LOOKUP&#xff0c;HLOOKUP&#xff0c;XLOOKUP各查找函数之间的区别到底是什么&#xff0c;也很容易记错。 今天我们就让ChatGPT人工智能来帮助我们总结出各函数的用法。 当涉及到在 Excel 中查找数据时&#xff0c;这些函数都可…

Excel中的HLOOKUP、VLOOKUP、XLOOKUP函数

昨天使用INDEX和MATCH两个EXCEL函数完成了表中数据的快速查找&#xff0c;想一想&#xff0c;EXCEL中还有另外的查找函数&#xff0c;比如HLOOKUP、VLOOKUP、LOOKUP、XLOOKUP函数&#xff0c;那使用它们能不能完成同样的操作呢&#xff1f;   可以的。   仍然是昨天的问题&…

【保姆级】lookup-method标签实践与分析

【Spring源码系列- IOC】 1 【Spring源码】0.安装Gradle环境 2 【Spring源码】1.下载与编译_pom relocation to an other version number is not f 3 【Spring源码】2.试个水先&#xff5e;Debug找到传说中的三级缓存(图解向&#xff0c;堆图预警) 4 【Spring源码】3. x…

实战! excel常用函数中lookup的用法

实战 ! VLOOKUP实操&#xff1a; 图一 图二 当我们拿到图一这样的表&#xff0c;而需要获得图二的数据时候&#xff0c;就可以这样做&#xff1a; 图三 在所需要的单元格输入公式&#xff0c;VLOOKUP([区域],表1,3,0)&am…

Xlookup、Vlookup请走开,万能的Wlookup函数来了!

前天&#xff0c;为大家介绍了关于Vlookup接班人Xlookup函数的介绍&#xff0c;一方面惊叹于Xlookup强大的查找功能&#xff0c;另一方面也担心自已只能远观而不能使用。毕竟付费office365的用户占极少数。点击进入查看>> 那怎么办&#xff1f;下面为大家编写了一个比Xl…

EXCEL基础:XLOOKUP函数的简单使用

实验表格如下&#xff0c;这是一个简单的NBA球星信息的表格&#xff1a; 最简单的使用方法&#xff1a; 1、【简单使用1】需求&#xff1a;通过【杜兰特】姓名&#xff0c;知道其所在的【球队】。 在【I3】单元格输入【XLOOKUP(H3,D2:D8,B2:B8)】&#xff0c;其中H3表示的是要…