码迷,mamicode.com
首页 > 其他好文 > 详细

CMFCRibbonButton使用HICON作为参数的构造函数BUG

时间:2014-07-18 18:07:35      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:icons   ribbon   hicon   小图标   

问题描述

CMFCRibbonButton constructor with HICON doesn‘t work properly because even though my icons are only 16x16 the button appear as 32x32.

使用HICON作为参数构建的RibbonButton即便指定用16X16的小图标,但最后显示在界面上仍是32X32的大图标。


解决方法

写一个新的小图标按钮类,重写GetImageSize和DrawImage方法如下:

class CSmallIconButton : public CMFCRibbonButton
{
public:
CSmallIconButton (UINT nID, LPCTSTR lpszText, HICON hIcon) :
CMFCRibbonButton(nID, lpszText, NULL, FALSE, hIcon)
{
}

virtual CSize GetImageSize (RibbonImageType type) const
{
if (type == RibbonImageLarge || m_hIconSmall == NULL)
{
return CSize(0, 0);
}

CSize sizeIcon(16, 16);

if (afxGlobalData.GetRibbonImageScale () != 1.)
{
sizeIcon.cx = (int) (.5 + afxGlobalData.GetRibbonImageScale () * sizeIcon.cx);
sizeIcon.cy = (int) (.5 + afxGlobalData.GetRibbonImageScale () * sizeIcon.cy);
}

return sizeIcon;
}

virtual void DrawImage (CDC* pDC, RibbonImageType type, CRect rectImage)
{
ASSERT_VALID (this);
ASSERT_VALID (pDC);

if (type != RibbonImageSmall || m_hIconSmall == NULL)
{
return;
}

CSize sizeIcon = GetImageSize(type);
::DrawIconEx (pDC->GetSafeHdc (), rectImage.left, rectImage.top, m_hIconSmall, sizeIcon.cx, sizeIcon.cy, 0, NULL, DI_NORMAL);
}
};
后来发现,MainPannel上的CMFCRibbonMainPanelButton也是如此,使用类似的方法即可。
微软官方原文:

CMFCRibbonButton使用HICON作为参数的构造函数BUG,布布扣,bubuko.com

CMFCRibbonButton使用HICON作为参数的构造函数BUG

标签:icons   ribbon   hicon   小图标   

原文地址:http://blog.csdn.net/giantchen547792075/article/details/37928027

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!