2016-05-19 28 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