记得 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);
}
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