上次写了两种方法合并ICON,其实不是很完美,但是当时已经可以满足要求了,所以也没进一步完善,今天有空所以特意又改进了一下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
HICON MergeIcon (HICON iconlg, HICON iconsm, int width, int height)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
HDC hdc = GetDC(NULL);
HBITMAP colorbmp, oldbmp;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//生成color位图
HDC tempdc = ::CreateCompatibleDC(NULL);
colorbmp = CreateCompatibleBitmap(hdc, width, height);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
oldbmp = (HBITMAP)SelectObject(tempdc, colorbmp);
![](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;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
FillRect(tempdc, &rc, hr);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DrawIcon(tempdc, 0, 0, iconlg);
DrawIcon(tempdc, 0, 0, iconsm);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//保存color位图
colorbmp = (HBITMAP)SelectObject(tempdc, oldbmp);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**///////////////////////////////////////////////////////////////////////////
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//生成mask位图
HDC maskdc = ::CreateCompatibleDC(NULL);
HBITMAP maskbmp = CreateCompatibleBitmap(maskdc, width, height);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
oldbmp = (HBITMAP)SelectObject(maskdc, maskbmp);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
hr = CreateSolidBrush(0xffffff);
FillRect(maskdc, &rc, hr);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DrawIcon(maskdc, 0, 0, iconlg);
DrawIcon(maskdc, 0, 0, iconsm);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//保存mask位图
maskbmp = (HBITMAP)SelectObject(maskdc, oldbmp);
![](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);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//方法二:
ICONINFO info;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
info.fIcon = true;
info.hbmMask = maskbmp;
info.hbmColor = colorbmp;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return CreateIconIndirect(&info);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)