2016-05-19 27 views
1

尽可能多的开发人员,我尝试在按钮上加载不同状态的按钮(正常,悬停和单击)。 我开始包括与尺寸64×64visual C++在presubclass按钮中绘制高质量的图标

我有大小35x35定义我自己的控制按钮图标:

CONTROL   "INV",IDC_SENSINV,"Button",BS_OWNERDRAW | WS_TABSTOP,75,106,35,35 

我定义了一个presubclass按钮,并在DRAWITEM功能,我得到RECT,加载图标,图标抽奖:

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); 
} 

我的问题是drawned图标的质量是不好的,我不明白为什么

  • 我的按钮的大小35x35和我得到的53x57
  • 一个矩形,其大小应的图标(小于或大于按钮更大)
  • 是什么,以获得最佳drawned图标质量的方式

我希望能够清楚,谢谢提前帮助。

+0

你最好使用位图为你的按钮图像。 – rrirower

回答

1

改为尝试​​。使用你想要的确切的图标大小。例如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); 
+0

你是对的,最好的是有一个图标大小等于rect为最好的质量。如果您想调整图标大小,则需要注意图标大小具有相同的垂直和水平调整大小系数。 –

0

LoadIcon总是以默认大小(通常为32x32)加载图标。所以图标缩小,绘制时再次展开。

始终使用​​检索具有不同大小的图标。 同样踩docs