上次写了两种方法合并ICON,其实不是很完美,但是当时已经可以满足要求了,所以也没进一步完善,今天有空所以特意又改进了一下
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
HICON MergeIcon (HICON iconlg, HICON iconsm, int width, int height)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
HDC hdc = GetDC(NULL);
HBITMAP colorbmp, oldbmp;
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//生成color位图
HDC tempdc = ::CreateCompatibleDC(NULL);
colorbmp = CreateCompatibleBitmap(hdc, width, height);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
oldbmp = (HBITMAP)SelectObject(tempdc, colorbmp);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
HBRUSH hr = CreateSolidBrush(0);
RECT rc;
rc.left = 0;
rc.top = 0;
rc.right = width;
rc.bottom = height;
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
FillRect(tempdc, &rc, hr);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DrawIcon(tempdc, 0, 0, iconlg);
DrawIcon(tempdc, 0, 0, iconsm);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//保存color位图
colorbmp = (HBITMAP)SelectObject(tempdc, oldbmp);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**///
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//生成mask位图
HDC maskdc = ::CreateCompatibleDC(NULL);
HBITMAP maskbmp = CreateCompatibleBitmap(maskdc, width, height);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
oldbmp = (HBITMAP)SelectObject(maskdc, maskbmp);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
hr = CreateSolidBrush(0xffffff);
FillRect(maskdc, &rc, hr);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DrawIcon(maskdc, 0, 0, iconlg);
DrawIcon(maskdc, 0, 0, iconsm);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//保存mask位图
maskbmp = (HBITMAP)SelectObject(maskdc, oldbmp);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//方法一:
HIMAGELIST ImageList = ImageList_Create(width, height, ILC_MASK|ILC_COLORDDB, 1, 0);
//将画好的BMP存入image list
ImageList_Add(ImageList, colorbmp, maskbmp);
//从image list中获取Icon
return ImageList_ExtractIcon(0, ImageList, 0);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//方法二:
ICONINFO info;
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
info.fIcon = true;
info.hbmMask = maskbmp;
info.hbmColor = colorbmp;
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return CreateIconIndirect(&info);
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}