Button visualc&x2B+;在presubclass按钮中绘制高质量图标

Button visualc&x2B+;在presubclass按钮中绘制高质量图标,button,visual-c++,mfc,visual-studio-2015,dialog,Button,Visual C++,Mfc,Visual Studio 2015,Dialog,和许多开发人员一样,我尝试在按钮上加载不同的图像,以适应不同的按钮状态(正常、悬停和单击)。 我开始加入一个尺寸为64x64的图标 我定义了自己的控制按钮,大小为35x35 CONTROL "INV",IDC_SENSINV,"Button",BS_OWNERDRAW | WS_TABSTOP,75,106,35,35 我定义了一个presubclass按钮,在drawItem函数中,我得到了rect、load图标和draw图标: void CimageButton::Draw

和许多开发人员一样,我尝试在按钮上加载不同的图像,以适应不同的按钮状态(正常、悬停和单击)。 我开始加入一个尺寸为64x64的图标

我定义了自己的控制按钮,大小为35x35

CONTROL         "INV",IDC_SENSINV,"Button",BS_OWNERDRAW | WS_TABSTOP,75,106,35,35
我定义了一个presubclass按钮,在drawItem函数中,我得到了rect、load图标和draw图标:

void CimageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rect = lpDrawItemStruct->rcItem; //rect of 53x57 ??
UINT state = lpDrawItemStruct->itemState;

hIcon = (HICON)LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(i_iconeNormal)

DrawIconEx(*pDC,
    0,
    2,
    (HICON)hIcon,
    53,
    53,
    0, NULL, DI_NORMAL);
}
我的问题是绘制图标的质量不好,我不明白为什么

  • 我的按钮大小为35x35,矩形为53x57
  • 图标的大小(小于或大于按钮)
  • 获得最佳绘图图标质量的方法是什么

我希望能说清楚,提前谢谢你的帮助。

试试
LoadImage
。使用您想要的确切图标大小。例如32x32。如果您的图标是48x48,则将其改为48x48,这将阻止调整图标大小

绘制后不需要
hIcon
,因此请销毁它以防止资源泄漏

HICON hIcon = (HICON)LoadImage(GetModuleHandle(NULL), 
    MAKEINTRESOURCE(i_iconeNormal), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);

DrawIconEx(*pDC, 0, 2, hIcon, 32, 32, 0, NULL, DI_NORMAL);
DestoryIcon(hIcon);

LoadIcon
始终以默认大小(通常为32x32)加载图标。因此,绘制时图标会缩小,然后再次展开

始终使用
LoadImage
检索不同大小的图标。
同样,您最好使用位图来显示按钮图像。您是对的,最好是让图标大小与矩形相等,以获得最佳质量。如果你想调整你的图标大小,你需要注意你的图标大小有相同的垂直和水平调整系数。