[MFC]CImageList僅顯示黑色的問題

前言網絡

   鼓搗MFC中的工具欄時用到了CImageList,沒仔細翻閱資料就開始用,結果出現了Win7 (32/64bit)系統中顯示沒問題,到xp和2003下就只顯示黑色的問題...
 ide

 

正文函數

  1、問題代碼及截圖工具

    1.1  截圖spa

      1.1.1  Win7翻譯

      
 

      1.1.2  Win2003 / XP指針

      

    1.2  代碼code

    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);

 

      代碼說明:htm

        a).  IDB_BITMAP_CONFIGIDB_BITMAP_ABOUTIDB_BITMAP_EXIT爲三張bmp圖片.blog

        b).  這段代碼加在OnInitDialog中

 

  2、函數說明
 

    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來實現透明效果。

 

  3、正常代碼
 

    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、200三、Win7下居顯示正常!

 

結束
 

  這問題還真是很差找,關鍵是不報錯,並且還在Win7下能正常顯示,看來用以前仍是要先好好看看例子再用 :)  

相關文章
相關標籤/搜索