一、问题代码及截图
1.1 截图
1.1.1 Win7
1.1.2 Win2003 / XP
1.2 代码
CImageList m_ilTB;
CBitmap m_about;
CBitmap m_config;
CBitmap m_exit;
CBitmap m_about;
CBitmap m_config;
CBitmap m_exit;
m_ilTB.Create(
32
,
32
, TRUE
|
ILC_COLOR8,
3
,
0
);
m_ilTB.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // :GetSysColor(COLOR_BTNFACE)
// RGB(0, 0, 0) &m_config
// HICON hIcon = NULL;
m_config.LoadBitmap(IDB_BITMAP_CONFIG);
m_ilTB.Add( & m_config, & m_config );
m_about.LoadBitmap(IDB_BITMAP_ABOUT);
m_ilTB.Add( & m_about, & m_about );
m_exit.LoadBitmap(IDB_BITMAP_EXIT);
m_ilTB.Add( & m_exit, & m_exit );
m_toolBar.GetToolBarCtrl().SetImageList( & m_ilTB);
m_ilTB.SetBkColor(::GetSysColor(COLOR_BTNFACE)); // :GetSysColor(COLOR_BTNFACE)
// RGB(0, 0, 0) &m_config
// HICON hIcon = NULL;
m_config.LoadBitmap(IDB_BITMAP_CONFIG);
m_ilTB.Add( & m_config, & m_config );
m_about.LoadBitmap(IDB_BITMAP_ABOUT);
m_ilTB.Add( & m_about, & m_about );
m_exit.LoadBitmap(IDB_BITMAP_EXIT);
m_ilTB.Add( & m_exit, & m_exit );
m_toolBar.GetToolBarCtrl().SetImageList( & m_ilTB);
代码说明:
a). IDB_BITMAP_CONFIG、IDB_BITMAP_ABOUT、IDB_BITMAP_EXIT为三张bmp图片.
b). 这段代码加在OnInitDialog中
二、函数说明
2.1 百度百科:http://baike.baidu.com/view/1725414.htm?fr=ala0_1
2.2 Add方法
int
Add(
CBitmap * pbmImage,
CBitmap * pbmMask
);
int Add(
CBitmap * pbmImage,
COLORREF crMask
);
int Add(
HICON hIcon
);
CBitmap * pbmImage,
CBitmap * pbmMask
);
int Add(
CBitmap * pbmImage,
COLORREF crMask
);
int Add(
HICON hIcon
);
1.2中是用的第一个重载,关键是第二个参数pbmMask,网络上的翻译是:指向包含掩码的位图的指针。如果无掩码与图象列表一起使用,此参数被忽略。而后来翻阅资料才知道一般人用的是第二个方法重载,通过crMask来实现透明效果。
三、正常代码
m_config.LoadBitmap(IDB_BITMAP_CONFIG);
m_ilTB.Add( & m_config,RGB( 255 , 255 , 255 ));
m_about.LoadBitmap(IDB_BITMAP_ABOUT);
m_ilTB.Add( & m_about,RGB( 255 , 255 , 255 ));
m_exit.LoadBitmap(IDB_BITMAP_EXIT);
m_ilTB.Add( & m_exit,RGB( 255 , 255 , 255 ));
m_ilTB.Add( & m_config,RGB( 255 , 255 , 255 ));
m_about.LoadBitmap(IDB_BITMAP_ABOUT);
m_ilTB.Add( & m_about,RGB( 255 , 255 , 255 ));
m_exit.LoadBitmap(IDB_BITMAP_EXIT);
m_ilTB.Add( & m_exit,RGB( 255 , 255 , 255 ));
修改完后在XP、2003、Win7下居显示正常!
本文转自博客园农民伯伯的博客,原文链接:[MFC]CImageList仅显示黑色的问题,如需转载请自行联系原博主。