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

  • 相关阅读:
    I00038 自守数(Automorphic number)
    I00036 盈数(Abundant number)
    I00036 盈数(Abundant number)
    I00037 亏数(Deficient number)
    I00037 亏数(Deficient number)
    I00035 完美数(Perfect number)
    I00035 完美数(Perfect number)
    I00034 累加与累乘
    I00034 累加与累乘
    codeforces589J 简单dfs,队列
  • 原文地址:https://www.cnblogs.com/over140/p/1762512.html
Copyright © 2011-2022 走看看