[MFC]CImageList仅显示黑色的问题
2010-06-22 11:13
197 查看
前言
鼓捣MFC中的工具栏时用到了CImageList,没仔细翻阅资料就开始用,结果出现了Win7 (32/64bit)系统中显示没问题,到xp和2003下就只显示黑色的问题...
正文
一、问题代码及截图
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;
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);
代码说明:
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
);
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));
修改完后在XP、2003、Win7下居显示正常!
结束
这问题还真是不好找,关键是不报错,而且还在Win7下能正常显示,看来用之前还是要先好好看看例子再用 :)
鼓捣MFC中的工具栏时用到了CImageList,没仔细翻阅资料就开始用,结果出现了Win7 (32/64bit)系统中显示没问题,到xp和2003下就只显示黑色的问题...
正文
一、问题代码及截图
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;
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);
代码说明:
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
);
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));
修改完后在XP、2003、Win7下居显示正常!
结束
这问题还真是不好找,关键是不报错,而且还在Win7下能正常显示,看来用之前还是要先好好看看例子再用 :)
相关文章推荐
- [MFC]CImageList仅显示黑色的问题
- MFC 控件显示层次调整(叠放次序)和绘制控制问题
- Windows MFC 两个OpenGL窗口显示与线程RC问题
- MFC中的绘图不显示问题
- MFC中新建类在classview中没有显示问题
- MFC CTreectrl 通过DeleteAllItems删除全部节点后,再插入节点不显示问题解决方法
- 关于MFC Cbutton按钮同时显示图标和文字的问题
- MFC 显示系统的时间的问题
- 关于MFC对话框不显示或出错的问题解决总结(更新中。。。)
- MFC ADO用CListCtrl CImageList显示图片
- 关于ListView拖动时item显示黑色问题
- MFC中ODBC连接MySQL数据库查询出的中文显示为乱码的问题
- 彻底解决显示Opencv中Mat图像到Mfc窗口问题
- ViewPager幻灯片删除出现显示黑色问题
- MFC非模式对话框与主框架显示前后问题
- 求助MFC 多行编辑框显示数据问题
- VC6.0下MFC的双缓存颜色显示问题
- 关于MFC播放背景音乐和显示背景图片的问题
- 【史上最简单】android硬件加速——关于图片过大无法显示,直接变黑色问题
- MFC中ODBC连接MySQL数据库查询出的中文显示为乱码的问题