昨天我发过一个帖子,是同样的问题,我以为自己已经解决了,但是今天下课回来调程序发现问题并没有解决。昨天想在VS2010中创建一个16x16的ICon,但是无论创建的是16x16的还是32x32或则是其他的,载入程序后读取的尺寸都是一样的,代码如下HICON hGreenIcon = AfxGetApp()->LoadIcon(IDI_Green_Icon);//IDI_Green_Icon是创建的ICon的ID
ICONINFO GreenIconInfo;
GetIconInfo(hGreenIcon, &GreenIconInfo);
CString str;
str.Format(_T("x = %d, y = %d"),GreenIconInfo.xHotspot, GreenIconInfo.yHotspot);
MessageBox(str);无论是创建多少尺寸的ICon,读取的结果都是x = 20, y = 20;
为什么呢,这个20到底是从哪儿来的呢?
ICONINFO GreenIconInfo;
GetIconInfo(hGreenIcon, &GreenIconInfo);
CString str;
str.Format(_T("x = %d, y = %d"),GreenIconInfo.xHotspot, GreenIconInfo.yHotspot);
MessageBox(str);无论是创建多少尺寸的ICon,读取的结果都是x = 20, y = 20;
为什么呢,这个20到底是从哪儿来的呢?
HBITMAP hBitmap = GreenIconInfo.hbmMask;
BITMAP bmp;
GetObject(hBitmap, sizeof(bmp), &bmp);
CString str;
str.Format(_T("%d, %d"), bmp.bmWidth, bmp.bmHeight);
AfxMessageBox(str);
HICON hGreenIcon = ::LoadImage(AfxGetInstanceHandle(), (LPTSTR)IDI_Green_Icon, IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
HICON hGreenIconSm = ::LoadImage(AfxGetInstanceHandle(), (LPTSTR)IDI_Green_Icon, IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
如果你只是想取得图标句柄所代表的图标的大小,可以这样:
CBitmap *pcbmp;
BITMAP bitmap;
CString str;
ICONINFO GreenIconInfo;
GetIconInfo(hGreenIcon, &GreenIconInfo);
pcbmp = FromHandle(GreenIconInfo.hbmMask);
if (pcbmp->GetBitmap(&bitmap)) {
str.Format(_T("x = %d, y = %d"), bitmap.bmWidth, bitmap.bmHeight);
MessageBox(str);
}
HICON hGreenIcon = ::LoadImage(AfxGetInstanceHandle(), (LPTSTR)IDI_Green_Icon, IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
HICON hGreenIconSm = ::LoadImage(AfxGetInstanceHandle(), (LPTSTR)IDI_Green_Icon, IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
如果你只是想取得图标句柄所代表的图标的大小,可以这样:
CBitmap *pcbmp;
BITMAP bitmap;
CString str;
ICONINFO GreenIconInfo;
GetIconInfo(hGreenIcon, &GreenIconInfo);
pcbmp = FromHandle(GreenIconInfo.hbmMask);
if (pcbmp->GetBitmap(&bitmap)) {
str.Format(_T("x = %d, y = %d"), bitmap.bmWidth, bitmap.bmHeight);
MessageBox(str);
}