• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

请问CImageList CREATE函数ILC_MASK作用

nyhenry1 2008-04-03 07:29:40
msdn说是这个flag使一个CImagelist有两位图要是没有这个flag就只有一个位图。还说了mask ,以及单色图之类的,很迷糊。并不明白这个flag是干什么的
...全文
496 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
vcminusminus 2008-04-16
学习!
回复
nyhenry1 2008-04-03
我想通了呵呵就是icon有monchrome类型的bitmap还有32*32bitmap
那么monchrome的bitmap就作为mask 来mask32*32的bitmap
很巧妙阿呵呵多谢阿
回复
Nintendo_hc 2008-04-03
搂主可以看一下Windows的设备管理器,停用其中一个设备你会发现,设备的图标上会增加一个红叉,这个红叉就是通过设置CImageList CREATE函数的ILC_MASK来实现的
回复
nyhenry1 2008-04-03
呵呵我大体懂你的意思了,可是我找你说的 add函数
并查了msdn后,还有个地方不是很清楚
int Add( CBitmap* pbmImage, CBitmap* pbmMask );

int Add( CBitmap* pbmImage, COLORREF crMask );

int Add( HICON hIcon )
是cimagelist 的 add 函数的三种形式



我的程序只有 HICON一种结点,似乎没有crMask的形式
msdn 说Cimagelist的

hIcon选项

Handle of the icon that contains the bitmap and mask for the new image.

那么这样的话一个icon 既有bitmap 又有它的mask
??这个不是很懂
回复
datoucaicai 2008-04-03
搭车感谢鹦鹉
以前我也不明白
回复
快乐鹦鹉 2008-04-03
就是说,你用了ILC_MASK后,可以这样做:
m_ImageList.Create(15,15,ILC_COLOR24|ILC_MASK,3,2);
CBitmap bmp1;
bmp1.LoadBitmap(IDB_COMOFF);
m_ImageList.Add(&bmp1,RGB(255,255,255));
看到最后一行Add函数了吗?最后一个参数就是指透明的颜色,表示显示时需要将图片IDB_COMOFF的所有白色透明掉。否则就会有白色底的。
每个图片都是长方形的,你的word图标整个长方形区域都作为有效内容了,自然没有透明的必要。但是,很多图标只是长方形中的某一部分是有意义的,其它都是背景色。将背景色透明是最好的显示效果。因此这个ILC_MASK就帮助你实现它。否则即使Add时指定了透明色也不起作用。
回复
nyhenry1 2008-04-03
谢谢回复这个是主要代码
什么颜色在这里被设为透明阿
还有我的图标好像原本没有背景色阿
就是一些word图标
m_ImageList.Create(16,16,ILC_COLOR32|ILC_MASK,0,0);
m_ImageList.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1)));
m_ImageList.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2)));
m_ImageList.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3)));
m_ImageList.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON4)));
m_ImageList32.Create(32,32,ILC_COLOR32|ILC_MASK,0,0);
m_ImageList32.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1)));
m_ImageList32.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2)));
m_ImageList32.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3)));
m_ImageList32.Add(::LoadIcon(::AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON4)));
回复
快乐鹦鹉 2008-04-03
设置mask的颜色,可以将位图中该颜色透明,否则会有背景色哦
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-04-03 07:29
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……