關於CListCtrl顯示bmp圖片問題的解決

      前幾天做一個聊天程序時在實現用戶列表時用到了CListCtrl控件,突然想在每列前面加上一個圖標或圖片。然而能實現ICON圖標加載,卻不能顯示圖片。今天終於找到原因了,主要原因是局部對象問題。

      先看代碼實現:

  1. void CMyListView::OnInitialUpdate()
  2. {
  3.    CListView::OnInitialUpdate();
  4.    //創建ListCtrl
  5.    m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS,
  6.                                                           CRect(0,0,400,200),
  7.                                                                      this, 0);
  8.    //設置ListCtrl的風格
  9.    m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()|
  10.                                         LVS_EX_SUBITEMIMAGES );
  11.    //------加載位圖;
  12.    Bitmap[0].LoadBitmap(IDB_BITMAP1);   
  13.    Bitmap[1].LoadBitmap(IDB_BITMAP2);
  14.    Bitmap[2].LoadBitmap(IDB_BITMAP3);
  15.    Bitmap[3].LoadBitmap(IDB_BITMAP4);
  16.    //Ⅰ.將位圖添加到ImageList裏面
  17.    m_Imagelist.Create(24, 24,ILC_COLOR4|ILC_MASK, 4, 4);   //----- 實例圖象框;
  18.    for (int i = 0 ; i < 4 ; i ++)
  19.    {
  20.      m_Imagelist.Add(&Bitmap[i], RGB(0, 0, 0));
  21.    }
  22.    //Ⅱ.將ImageList和ListCtrl關聯,關鍵之二
  23.    m_ListCtrl.SetImageList(&m_Imagelist,LVSIL_SMALL); 
  24.    //3、初始化列表表頭
  25.    m_ListCtrl.InsertColumn(0,_T("T1"),LVCFMT_LEFT,80);
  26.    m_ListCtrl.InsertColumn(1,_T("A1"),LVCFMT_LEFT,32);
  27.    m_ListCtrl.InsertColumn(2,_T("A2"),LVCFMT_LEFT,32);
  28.    //4、listctrl 創建數據--
  29.    CString str;
  30.    for(int j = 0;j < 4 ;j ++)
  31.    {
  32.      m_ListCtrl.InsertItem(j,NULL,1);
  33.      LVITEM item;                      //Item結構,很全的東西
  34.      item.iItem = j;                   //Item索引
  35.      item.iSubItem = 0;                //SubItem索引
  36.      //Ⅲ.設定顯示的格式
  37.      item.mask = LVIF_IMAGE|LVIF_TEXT; //顯示文本和圖片
  38.      //Ⅳ.設定對應圖片的索引值
  39.      item.iImage = j;                  //圖片索引值
  40.      item.pszText = _T("Virqin");      //在當前Item要顯示的文本
  41.      m_ListCtrl.SetItem(&item);        //設定Item
  42.    }
  43. }

       以上代碼就能實現在列表第一列顯示圖片,共四行,以及圖片後面跟着文字"Virqin"。現在要說的倒不是它實現後的效果,說說我遇到的問題吧,最初我把Bitmap和m_ImageList兩個對象都是在當前函數裏定義的,因爲是局部變量,當本函數執行完後對象就會被析構,所以圖像列表和位圖都被析構了。

       我總結一下出現我這樣問題的根本原因還是對C++的對象意識不深,理解太膚淺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章