合并两个ICON (续)

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

转载于:https://www.cnblogs.com/Jianchidaodi/archive/2006/11/17/563591.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值