Visual C++ 6的IDE只能编辑16色工具栏,即使将256色以上的图片粘贴到工具栏中,程序编译后任然会降低颜色数。
要使用256色以上的位图作为工具栏图标,可以在代码中加载图片列表再设置到工具栏上。
要点:
1、向工具栏发送TB_SETIMAGELIST消息,可以设置工具栏处于正常情况下的图片列表。
2、向工具栏发送TB_SETHOTIMAGELIST消息,可以设置鼠标位于工具栏按钮之上时要显示的图片列表。
///
建立MFC对话框工程Toolbar256;
在资源编辑器中新建一个工具栏,ID为IDR_TOOLBAR,并在其上添加3个大小为32*32像素的按钮;
用图片编辑工具创建两幅24位真彩色位图,大小为96*32像素(可分成3个32*32像素);
将两幅位图导入项目的资源中,命名为IDB_COLD和IDB_HOT
添加成员
CToolBar m_toolbar;///工具栏
OnInitDialog
///创建工具栏
m_toolbar.CreateEx(this , TBSTYLE_FLAT , WS_CHILD | WS_VISIBLE | CBRS_TOP);
m_toolbar.LoadToolBar(IDR_TOOLBAR);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST ,AFX_IDW_CONTROLBAR_LAST , 0);
CImageList imgs;
CBitmap bmp;
///创建正常模式的图片列表
bmp.LoadBitmap(IDB_COLD);
imgs.Create(32,32,ILC_MASK |ILC_COLOR24 ,3,1);
imgs.Add(&bmp , RGB(255,255,255));
///将图片列表设置到工具栏上
m_toolbar.SendMessage(TB_SETIMAGELIST , 0 , (LPARAM)imgs.m_hImageList);
imgs.Detach();
bmp.Detach();
///创建鼠标处于按钮之上的图片列表
bmp.LoadBitmap(IDB_HOT);
imgs.Create(32,32,ILC_MASK | ILC_COLOR24 ,3,1);
imgs.Add(&bmp,RGB(255,255,255));
///将图片列表设置到工具栏上
m_toolbar.SendMessage(TB_SETHOTIMAGELIST , 0 , (LPARAM)imgs.m_hImageList);
imgs.Detach();
bmp.Detach();
1、imgs.Create(32,32,ILC_MASK | ILC_COLOR24 ,3,1);创建图片列表的关键,前两个参数是列表中图片的大小,
ILC_OLOR24指出图片为24位真彩色,
ILC_MASK指出添加的图片显示时要让指定的颜色透明,最后两个参数是列表的初始大小和动态调整大小时的增量。
2、
imgs.Add(&bmp , RGB(255,255,255));将位图添加到图片列表,图片列表会按照创建时制定的大小来切分图片,本例是将96*32的图片切分为3个32*32的位图。
第二个参数为透明色,本例为白色
![]()