windows下将两个ICON组合

windows下将两个ICON组合
      记得 Windows 里的快捷方式么,将你的程序拖到桌面上建立一个快捷方式,不论程序用的是什么Icon,Microsoft都会在Icon左下脚加上一个小小的箭头,很好玩是不是?下面我提供两种方式来实现这种效果:

1. 直接利用HICON CreateIconIndirect ( PICONINFO piconinfo ); 

HICON CombineIcon(
                 HICON hBaseIcon, //底层Icon,yi:xFc(`WDM教育N=yz"放在下面的那个

                 HICON hTopIcon, //上层Icon,盖在上面的那个
                
                 int iWidth, //Icon的宽度

                 int iHeight, //Icon的高度

                 COLORREF colorkey//透明色

                 )
{
    HDC hdc = GetDC(NULL);

    //建立一个兼容DC,用于作图

    HDC memdc = CreateCompatibleDC(hdc);

     //注意,这里的参数dc不能为兼容dc,否则就是单色位图

    HBITMAP membmp = (HBITMAP)CreateCompatibleBitmap(hdc, 32, 32);

    HBITMAP oldbmp = (HBITMAP)SelectObject(memdc, membmp);

    HBRUSH br = (HBRUSH)GetStockObject(colorkey);   
   
    RECT rect;
    rect.left = 0;
    rect.right = 32;
    rect.top = 0;
    rect.bottom = 32;

    SelectObject(memdc, br);

    //填充透明色

    FillRect(dc, &rcct, br);

    DrawIconEx(memdc, 0, 0, hBaseIcon, iWidth, iHeight, 0, NULL, DI_NORMAL); 

    DrawIconEx(memdc, 0, 0, hTopIcon , iWidth, iHeight, 0, NULL, DI_NORMAL);
  
     //保持图片

    SelectObject(memdc, oldbmp);

    ICONINFO info;

    info.fIcon = true;
    info.hbmMask = CreateBitmap(32, 32, 1, 1, NULL);
    info.hbmColor = membmp;

    return CreateIconIndirect(&info);


}

2. 利用ImageList.ExtractIcon 将bitmap 转化成Icon

HICON CombineIcon(               
                  HICON hBaseIcon, //底层Icon,yi:xFc(`WDM教育N=yz"放在下面的那个

                 HICON hTopIcon, //上层Icon,盖在上面的那个
               
                 int iWidth, //Icon的宽度

                 int iHeight, //Icon的高度

                 COLORREF colorkey//透明色

                 )

{

    HBITMAP         bmp;
    HDC             dc;
    HBRUSH          br;
    RECT            rc;

    HDC             hdc = GetDC (NULL);


    //建立一个兼容DC,用于作图
   

    dc = CreateCompatibleDC(hdc);

    //生成一空白BMP图

    bmp = CreateCompatibleBitmap(hdc, iWidth, iHeight);

 

    //建立一个实色的刷子

    br = CreateSolidBrush(colorkey);

 

    //生成一个Icon大小的矩形

    rc.left = 0;

    rc.top = 0;

    rc.bottom = iHeight;

    rc.right = iWidth;

 

    //将空白BMP选入DC,

    HBITMAP            oldbmp = (HBITMAP)SelectObject(dc, bmp);

    //填充透明色

    FillRect(dc, &rc, br);

    // 在BMP上画底层Icon

    DrawIconEx(dc, 0, 0, hBaseIcon, iWidth, iHeight, 0, NULL, DI_NORMAL);    

    //在BMP上画上层Icon

    DrawIconEx(dc, 0, 0, hTopIcon, iWidth, iHeight, 0, NULL, DI_NORMAL);    

 

    //保存画好的BMP

    SelectObject(dc, oldbmp);
  
    // 注意参数使用ILC_COLORDDB,这样可以支持高彩Icon(256活256色以上)

    HIMAGELIST ImageList;

    ImageList_Create(ImageList, iWidth, iHeight, ILC_MASK|ILC_COLORDDB, 1, 0);

    //将画好的BMP存入image list,并设置透明色

    ImageList_Add(ImageList, bmp, colorkey);

    //从image list中获取Icon

  
    return  ImageList_ExtractIcon(0, ImageList, 0);

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值