天天看點

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

一、問題代碼及截圖

    1.1  截圖

      1.1.1  Win7

       

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

      1.1.2  Win2003 / XP

      

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

    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_CONFIG、IDB_BITMAP_ABOUT、IDB_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 

);

   COLORREF crMask 

   HICON hIcon 

      1.2中是用的第一個重載,關鍵是第二個參數pbmMask,網絡上的翻譯是:指向包含掩碼的位圖的指針。如果無掩碼與圖象清單一起使用,此參數被忽略。而後來翻閱資料才知道一般人用的是第二個方法重載,通過crMask來實作透明效果。

三、正常代碼

    m_ilTB.Add(&m_config,RGB(255,255,255));

    m_ilTB.Add(&m_about,RGB(255,255,255));

    m_ilTB.Add(&m_exit,RGB(255,255,255));

    修改完後在XP、2003、Win7下居顯示正常!

繼續閱讀