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

问题描述

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也是如此,使用类似的方法即可。

微软官方原文:

http://connect.microsoft.com/VisualStudio/feedback/details/487869/cmfcribbonbutton-constructor-with-hicon

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

时间: 2024-12-18 02:21:16

CMFCRibbonButton使用HICON作为参数的构造函数BUG的相关文章

C++构造函数的自动调用(调用一个父类的构造函数,有显性调用最好,否则就默认调用无参数的构造函数)——哲学思想:不调用怎么初始化父类的成员数据和VMT?

我总是记不住构造函数的特点,关键还是没有领会那个哲学思想:父类的构造函数一方面要初始化它自己的成员数据,另一方面也要建立它自己的VMT呀!心里默念一百遍:一定调用父类构造函数,一定调用父类构造函数,一定调用父类构造函数,一定调用父类构造函数,一定调用父类构造函数,一定调用父类构造函数,一定调用父类构造函数,一定调用父类构造函数VMT,一定调用父类构造函数VMT,一定调用父类构造函数VMT,一定调用父类构造函数VMT,一定调用父类构造函数VMT,一定调用父类构造函数VMT,一定调用父类构造函数VM

【spring教程之二】spring注入xml中带参数的构造函数

1.续上文,如果想在注入bean文件的时候,传入参数到构造函数中.主要需要修改的就是spring.xml配置文件中的配置方法. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

explicit:C++规定,当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换

explicit研究 explicit是C++中的关键字,不是C语言中的.英文直译是“明确的”.“显式的”意思.出现这个关键字的原因,是在C++中有这样规定的基础上:当定义了只有一个参数的构造函数时,同时也定义了一种隐式的类型转换.先看类型转换. http://blog.csdn.net/guodongxiaren/article/details/24455653

2.9 C++使用默认参数的构造函数

参考:http://www.weixueyuan.net/view/6341.html 总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常老的书,为了尽快清空库存,店主想了一下,决定开展一个大甩卖活动,所有的这些书全部以五美元的价格出售.此时如果需要尽快将这些书的信息录入到书店的书单中,为了方便,我们可以在book类中添加一个带默认参数的构造函数.

没有为该对象定义无参数的构造函数。

#region 消除未付款订单的流水号 [HttpPost] public JsonResult UnLockCategoryGuidNumber(Bill_Category category1) { } 在为这个JsonResult传递参数的时候遇到了一个错误,服务器返回的是500,报错的信息是没有为该对象定义无参数的构造函数.,一开始我以为是没有写对方法名或者是json字符串里的参数名,又对了对,没有错啊.... 当我把Bill_Category category1放到方法里面的时候,才发现

WebApi接口访问异常问题。尝试创建“testController”类型的控制器时出错。请确保控制器具有无参数公共构造函数

本来运行的好好的webAPI 接口突然报了个 :“尝试创建“testController”类型的控制器时出错.请确保控制器具有无参数公共构造函数” 错误.耗了半宿最终解决了, 原因: api控制器中引用了 config 配置文件 没有的 key 值 private static string WatchSwitch = ConfigurationManager.AppSettings["WatchSwitch"].ToString().Trim(); //最小提现额度 config 文

URL传递多个参数遇到的bug

bug所在: 通过URL传递多个参数的时候,其一是中文出现乱码,其二是空格被"%20"替代: 原因分析:原理暂时还不清楚,后续再研究下原理,只知道有中文的时候就会出现乱码:%20是url空格的编码: 提到编码,就得来简单了解下(周末再详细补充下知识)编码的几种格式: 一:ASCII码,美国标准信息交换码,只有7位. 二:UTF-8:是一种针对Unicode的可变长度字符编码,用1-6个字节 编码Unicode字符. 三:ISO-8859-1,是浏览器默认编码,包含了西方欧洲语言不可缺少

含参数的构造函数_将对象灵活的初始化

初始化过程和一般的变量相同 student::student(string na,string i) { cout<<"it's creating"<<endl; name=na;id=i; } ............... string name="mark",id="651445"; student s(name,id) ; //将类初始化为可选择的值 完整代码: 1 #include <bits/stdc++

使用默认参数的构造函数 .

1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 #include<vector> 8 #include<set> 9 #include<stack> 10 #include<string> 1