visual c ++在presubclass按钮中绘制一个高质量的图标

时间:2016-05-19 08:04:48

标签: 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图标和绘制图标:

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
  • 哪个尺寸应该是图标(小于或大于按钮)
  • 获得最佳绘制图标质量的方法是什么

我希望明确,谢谢你提前帮助。

2 个答案:

答案 0 :(得分:1)

请尝试使用LoadImage。使用您想要的确切图标大小。例如32x32。如果您的图标是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);

答案 1 :(得分:0)

LoadIcon始终加载默认大小的图标(通常为32x32)。因此,图标会缩小,而不是在绘制时再展开。

始终使用LoadImage检索不同大小的图标。 还要踩docs