time 
设为首页】【收藏本站
当前位置: 主页 > 程序设计 > C\C++\VC > C++基础 > [MFC]CImageList仅显示黑色的问题

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

时间:2010-08-06 22:40 点击:1699次 字体:[ ]




前言

   鼓捣MFC中的工具栏时用到了CImageList,没仔细翻阅资料就开始用,结果出现了Win7 (32/64bit)系统中显示没问题,到xp和2003下就只显示黑色的问题...
 

 

正文

  一、问题代码及截图

    1.1  截图

      1.1.1  Win7

       [MFC]CImageList仅显示黑色的问题_www.fengfly.com
 

      1.1.2  Win2003 / XP

      [MFC]CImageList仅显示黑色的问题_www.fengfly.com

    1.2  代码

    CImageList    m_ilTB;
    CBitmap m_about;
    CBitmap m_config;
    CBitmap m_exit;


 

    m_ilTB.Create(3232, TRUE | ILC_COLOR8, 30);
    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下居显示正常!

 

结束
 

  这问题还真是不好找,关键是不报错,而且还在Win7下能正常显示,看来用之前还是要先好好看看例子再用 :)



本文地址 : http://www.fengfly.com/plus/view-185931-1.html
标签: MFC CImageList
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: