[MFC]CImageList仅显示黑色的问题

简介:

一、问题代码及截图

    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_CONFIGIDB_BITMAP_ABOUTIDB_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下居显示正常!

本文转自博客园农民伯伯的博客,原文链接:[MFC]CImageList仅显示黑色的问题,如需转载请自行联系原博主。

目录
相关文章
|
Windows
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
|
6月前
Qt颜色、文件、字体对话框
Qt颜色、文件、字体对话框
|
7月前
MFC隐藏对话框边框和可拖动
MFC隐藏对话框边框和可拖动
MFC修改窗口背景颜色
MFC修改窗口背景颜色
285 0
设置 窗体 静态控件颜色
设置 窗体 静态控件颜色
83 0
PyQt5 技术篇-调用颜色对话框(QColorDialog)获取颜色,调色板的调用。
PyQt5 技术篇-调用颜色对话框(QColorDialog)获取颜色,调色板的调用。
410 0
PyQt5 技术篇-调用颜色对话框(QColorDialog)获取颜色,调色板的调用。
|
存储 Windows
MFC 窗体背景图片设置
很多人在做MFC 界面的时候想要给对话框加入背景图片,很多人都会想到在OnPaint()里面来加一段代码来实现,其实这样做并不怎么科学,因为它会导致窗口不断重绘,在很多项目中窗口会闪烁(比如带播放视频的一个对话框);下面的方法我感觉更为合理。
2095 0