修改 CMFCRibbonGallery 的默认按钮数

CMFCRibbonGallery 中的默认按钮数是6,SetIconsInRow 方法可以设置下拉框中的按钮列数,正常显示框中的按钮数确是固定为6,不能改变,google以后建立一个新类继承于这个类,把默认列数设为100,而 CMFCRibbonGallery 会根据窗口宽度自动调整实际列数,效果极好。原代码如下。

 #pragma once

// TTMv8RibbonGallery 命令目标

class TTMv8RibbonGallery : public CMFCRibbonGallery
{
	DECLARE_DYNCREATE(TTMv8RibbonGallery)

public:
	TTMv8RibbonGallery();
	virtual ~TTMv8RibbonGallery();

//Methods
public:
	void SetMaxColums(int nColums);

//Properties
protected:
	int m_nMaxColumns;

//Override
public:
	virtual CSize GetRegularSize(CDC* pDC);

};

// TTMv8RibbonGallery.cpp : 实现文件
// 增加功能,重定显示框的最大列数。

#include "stdafx.h"
#include "TTMv8.h"
#include "TTMv8RibbonGallery.h"

// 从基类源码中自制过来的
const int nImageMargin = 4;
const int nBorderMarginY = 3;

IMPLEMENT_DYNCREATE(TTMv8RibbonGallery, CMFCRibbonGallery)

// TTMv8RibbonGallery

TTMv8RibbonGallery::TTMv8RibbonGallery()
{
	m_nMaxColumns = 100;
	m_nPanelColumns = m_nMaxColumns;
}

TTMv8RibbonGallery::~TTMv8RibbonGallery()
{
}

// 设置显示框(区别于下拉框)的最大列数
void TTMv8RibbonGallery::SetMaxColums(int nColums)
{
	m_nMaxColumns = nColums;
}

// 复制基类代码,修改最大列数。
CSize TTMv8RibbonGallery::GetRegularSize(CDC* pDC)
{
	ASSERT_VALID(this);

	const CSize sizeImage = GetIconSize();
	CSize sizePanelSmallImage(16, 16);

	if (m_pParent != NULL)
	{
		ASSERT_VALID(m_pParent);
		sizePanelSmallImage = m_pParent->GetImageSize(FALSE);
	}

	m_bSmallIcons = (sizeImage.cy <= sizePanelSmallImage.cy * 3 / 2);

	if (m_bResetColumns && !m_bSmallIcons)
	{
		m_nPanelColumns = m_nMaxColumns;

		if (m_pParentMenu != NULL && m_pParentMenu->GetCategory() == NULL)
		{
			// From the default panel button
			m_nPanelColumns = 3;
		}
	}

	m_bResetColumns = FALSE;

	if (IsButtonLook())
	{
		return CMFCRibbonButton::GetRegularSize(pDC);
	}

	if (m_arIcons.GetSize() == 0)
	{
		CreateIcons();
	}

	ASSERT_VALID(m_pParent);

	const CSize sizePanelLargeImage = m_pParent == NULL ? 
		CSize (0, 0) : m_pParent->GetImageSize(TRUE);

	CSize size(0, 0);

	if (m_bSmallIcons)
	{
		size.cx = sizeImage.cx * m_nPanelColumns;

		int nRows = 3;

		if (sizePanelLargeImage != CSize(0, 0) && sizeImage.cy != 0)
		{
			nRows = max(nRows, sizePanelLargeImage.cy * 2 / sizeImage.cy);
		}

		size.cy = nRows * sizeImage.cy + 2 * nBorderMarginY;
	}
	else
	{
		size.cx = (sizeImage.cx + 2 * nImageMargin) * m_nPanelColumns;
		size.cy = sizeImage.cy + 3 * nImageMargin + 2 * nBorderMarginY;
	}

	//---------------------------------------
	// Add space for menu and scroll buttons:
	//---------------------------------------
	size.cx += GetDropDownImageWidth() + 3 * nImageMargin;

	return size;

}

效果图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值