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);
}
记得 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);
}
相关文章推荐
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)
- MacBook BootCamp 分出两个Windows分区的超简便方法
- sdut2605山东省赛第四届/( A^f(1)+A^f(2)+ ... + A^f(n) )% P/存储中间值/将大数打表并用两个数组组合表示
- 输入两个整数n和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m,要求将其中所有的可能组合列出来。
- 重新组合两个数组,使得他们的元素差最小
- 根据数组中某个两个值作为键、并把数组中同时存在该两个字段值的数组值累加、组合成二维数组
- Windows电脑安装两个jdk
- pku2192---Zipper(动态规划题,随机组合两个字符串)
- Group By两列字段时如何将组合的两个字段以表的形式给出
- JMS createSession(false, Session.AUTO_ACKNOWLEDGE); 两个参数不同组合下的区别
- 如何在windows下安装两个apache
- 两个精彩的.Net控件ComponentOne Studio和Dundas Chart For Windows Forms
- windows两个命令
- 双网卡接入两个网络(Windows)
- PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
- 2017.3.8 windows下路径问题,为什么最后t文件夹需要写两个\\
- windows 两个电脑拷贝文件不成功的解决方法
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
- Windows下在查ip时出现两个ip