我有一张bmp,是7个图标连在一起的图片,http://hiphotos.baidu.com/learnmfc/pic/item/3cddd84390caf90a9213c65d.jpg,
我想用imagelist获得这7个图标,并且显示在工具栏上,代码如下:
CImageList cImageList;
CBitmap cBitmap;
BITMAP bmBitmap;
if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP7),
IMAGE_BITMAP, 0, 0,
LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
!cBitmap.GetBitmap(&bmBitmap))
{
return FALSE;
TRACE("\n\nshit");
} CSize cSize(bmBitmap.bmWidth, bmBitmap.bmHeight);
int nNbBtn = cSize.cx/48;
if (!cImageList.Create(48, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 1))
return FALSE;
if (cImageList.Add(&cBitmap,RGB(0,0,0)) == -1)
return FALSE; cBitmap.Detach(); m_toolBar.CreateEx(this,TBSTYLE_FLAT); m_toolBar.SetButtons(arr,7);
//关联图像列表
m_toolBar.GetToolBarCtrl().SetImageList(&cImageList);
m_toolBar.SetSizes(CSize(60,60),CSize(48,cSize.cy));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);现在的问题是,工具栏上是没有图片的,我也不知道怎么回事.
问题1:红色代码部分能不能把7个连在一起的图标分为7个图标,给cImageList【0】,cImageList【1】。。?如果不能该怎么做?如果是一张张图片分别给cImageList我会的,但是7个连在一起的图标(就1张bmp图片)怎么做就不知道了,谢谢大家。
我想用imagelist获得这7个图标,并且显示在工具栏上,代码如下:
CImageList cImageList;
CBitmap cBitmap;
BITMAP bmBitmap;
if (!cBitmap.Attach(LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP7),
IMAGE_BITMAP, 0, 0,
LR_DEFAULTSIZE|LR_CREATEDIBSECTION)) ||
!cBitmap.GetBitmap(&bmBitmap))
{
return FALSE;
TRACE("\n\nshit");
} CSize cSize(bmBitmap.bmWidth, bmBitmap.bmHeight);
int nNbBtn = cSize.cx/48;
if (!cImageList.Create(48, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 1))
return FALSE;
if (cImageList.Add(&cBitmap,RGB(0,0,0)) == -1)
return FALSE; cBitmap.Detach(); m_toolBar.CreateEx(this,TBSTYLE_FLAT); m_toolBar.SetButtons(arr,7);
//关联图像列表
m_toolBar.GetToolBarCtrl().SetImageList(&cImageList);
m_toolBar.SetSizes(CSize(60,60),CSize(48,cSize.cy));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);现在的问题是,工具栏上是没有图片的,我也不知道怎么回事.
问题1:红色代码部分能不能把7个连在一起的图标分为7个图标,给cImageList【0】,cImageList【1】。。?如果不能该怎么做?如果是一张张图片分别给cImageList我会的,但是7个连在一起的图标(就1张bmp图片)怎么做就不知道了,谢谢大家。
BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREFcrMask );
BOOL Create( CImageList& ImageList1, int nImage1, CImageList& ImageList2, int nImage2, int dx, int dy );返回值:如果成功,则返回非零值,否则为0。参数: cx 每个图象的尺寸,以像素为单位。
cy 每个图象的尺寸,以像素为单位。
nFlags 确定创建的图象列表类型。此参数可能为以下值的组合,但只能有一个ILC_COLOR值。 值 含义
ILC_COLOR 如果没有其它ILC_COLOR* 标记被确定,则使用缺省行为。典型地,缺省为ILC_COLOR4;但对于旧的显示驱动程序,缺省为ILC_COLORDDB
ILC_COLOR4 使用4位(16色)设备独立位图(DIB)部分作为图象列表的位图
ILC_COLOR8 使用8位DIB部分。彩色表格使用的颜色与半色调调色板的一样
ILC_COLOR16 使用16位(32/64K色)DIB部分
ILC_COLOR24 使用24位DIB部分
ILC_COLOR32 使用32位DIB部分
ILC_COLORDDB 使用设备独立位图
ILC_MASK 使用掩码。图象列表包含两个位图,其中一个是用做掩码的位图。如果不包括此值,图象列表只包含一个位图
nInitial 图象列表最初包含的图象数。
nGrow 当系统需要改变列表为新图象准备空间时,图象列表可生成的图象数。此参数替代改变的图象列表所能包含的新图象数。
nBitmapID 与图象列表联系的位图的源ID。
crMask 用于生成一个掩码的颜色。此指定的位图中的颜色的每个像素变为黑色,掩码中相应位设置为1。
lpszBitmapID 包含图象的源ID的字符串。
ImageList1 CImageList对象的参考。
nImage1 第一个存在的图象的索引。
ImageList2 CImageList对象的参考。
nImage2 第二个存在的图象的索引。
dx 每个图象的尺寸,用像素表示。
dy 每个图象的尺寸,用像素表示。 说明:
需要两步构造一个CImageList。首先调用构造函数,然后调用Create,创建图象列表并附加给CImageList对象。请参阅:CImageList::CImageList, COLORREF
if (!cImageList.Create(48, cSize.cy, ILC_COLOR24|ILC_MASK, nNbBtn, 1))
return FALSE; if (cImageList.Add(&cBitmap,RGB(0,0,0)) == -1)
return FALSE; 能不能把7个连在一起的图标切割开来,分别给给cImageList【0】,cImageList【1】。。,因为网上的其他很多方法都是很烦的,我觉得这样比较简单,道理是也说的通,但是工具栏上什么也没显示,就不知道为什么了,请教大家了,谢谢。是bmp图片,上传到网上,自动转为jpg。
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); cImageList.Detach(); <-加上这句。
请问一下,这句话是什么意思?
cImageList.Add(&cBitmap,RGB(0,0,0)) 我的理解就是,把RGB所设定的颜色给设为透明,实际效果也是如此,但是msdn什么意思啊,哪有把它变为黑色啊,还有 掩码中相应位设置为1,怎么说的我很糊涂啊。这个到底什么意思?
http://oryx.5d6d.com/viewthread.php?tid=34&extra=page%3D1&frombbs=1