您的位置:首页 > 其它

windows下将两个ICON组合

2013-05-18 14:32 162 查看
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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐