zoukankan      html  css  js  c++  java
  • [MFC]CImageList仅显示黑色的问题


    前言

       鼓捣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(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下能正常显示,看来用之前还是要先好好看看例子再用 :)

  • 相关阅读:
    在Html中使用echarts图表
    html+css模拟微信对话
    解决React 的<img >src使用require的方式图片显示不出来,展示的是[object Module]的问题
    easygui入门
    python安装easygui
    关于gcc、make和CMake的区别
    FreeRTOS使用心得。
    C/C++整数输出位不足前补0方法
    AngularJS前端分页 + PageHelper后端分页
    AngularJS常见指令
  • 原文地址:https://www.cnblogs.com/over140/p/1762512.html
Copyright © 2011-2022 走看看