none
listview中添加的图片有的不显示 RRS feed

  • 问题

  • 我现在遇到的问题是,我在列表视图中给每一列添加一个bmp图片,各列的图片都不相同,这时候出现了问题,在编译运行时候,有些列的图片显示了,但是有些列的图片不显示,背景是一片空白。我搜索了很多答案,但是仍然没有发现解决我的类似的问题的。想请问是什么原因导致到。下面是我的主要代码:

     UINT nStyle = m_lstPicture.GetStyle();
     m_lstPicture.ModifyStyle(0, LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_REPORT);

     nStyle = m_lstPicture.GetExtendedStyle();
     m_lstPicture.SetExtendedStyle(m_lstPicture.GetExtendedStyle()
      | LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT);

     

     m_pLstImg = new CImageList();
     m_pLstImg->Create(48, 30, ILC_COLOR, 6, 0);
     CBitmap bmp;
     bmp.LoadBitmap(IDB_BITMAP1);
     m_pLstImg->Add(&bmp, RGB(0, 0, 0));
     bmp.DeleteObject();
     bmp.LoadBitmap(IDB_BITMAP2);
     m_pLstImg->Add(&bmp, RGB(0, 0, 0));
     bmp.DeleteObject();
     bmp.LoadBitmap(IDB_BITMAP3);
     m_pLstImg->Add(&bmp, RGB(0, 0, 0));
     TRACE("%d", GetLastError());
     bmp.DeleteObject();
     bmp.LoadBitmap(IDB_BITMAP4);
     m_pLstImg->Add(&bmp, RGB(0, 0, 0));
     bmp.DeleteObject();
     bmp.LoadBitmap(IDB_BITMAP9);
     m_pLstImg->Add(&bmp, RGB(0, 0, 0));
     bmp.DeleteObject();
     bmp.LoadBitmap(IDB_BITMAP8);
     m_pLstImg->Add(&bmp, RGB(0, 0, 0));
     bmp.DeleteObject();
     m_lstPicture.SetImageList(m_pLstImg, LVSIL_SMALL);
     
     m_lstPicture.InsertColumn(0, "a", LVCFMT_CENTER, 0);
     m_lstPicture.InsertColumn(1, "aaa", LVCFMT_CENTER, 100); //vc中建的图片
     m_lstPicture.InsertColumn(2, "aaa", LVCFMT_CENTER, 100); //vc中建的图片
     m_lstPicture.InsertColumn(3, "aaa", LVCFMT_CENTER, 100); //其他图片
     m_lstPicture.InsertColumn(4, "aaa", LVCFMT_CENTER, 100); //其他图片
     m_lstPicture.InsertColumn(5, "aaa", LVCFMT_CENTER, 100); //其他图片
     m_lstPicture.InsertColumn(6, "aaa", LVCFMT_CENTER, 100); //其他图片
     m_lstPicture.InsertColumn(7, "aaa", LVCFMT_CENTER, 100);  //自建
     m_lstPicture.InsertColumn(8, "aaa", LVCFMT_CENTER, 100);  //其他图片

     

     m_lstPicture.DeleteAllItems();

     
     for (int i = 0; i < 10; i++)
     {  
      CString str;
      str.Format("%u", -i);
      m_lstPicture.InsertItem(i, "", -1);
      m_lstPicture.SetItemText(i, 1, str);
      m_lstPicture.SetItem(i, 2, LVIF_IMAGE |  LVIF_TEXT, "ok", 0, 0, 0, 1);
      m_lstPicture.SetItem(i, 3, LVIF_IMAGE |  LVIF_TEXT, "ok", 1, 0, 0, 2);
    //  m_lstPicture.SetItemText(i, 3, str);
      m_lstPicture.SetItem(i, 4, LVIF_IMAGE |  LVIF_TEXT, "ok", 2, 0, 0, 3);
      m_lstPicture.SetItem(i, 5, LVIF_IMAGE |  LVIF_TEXT, "ok", 3, 0, 0, 4);
      m_lstPicture.SetItem(i, 6, LVIF_IMAGE |  LVIF_TEXT, "ok", 4, 0, 0, 5);
      m_lstPicture.SetItem(i, 7, LVIF_IMAGE |  LVIF_TEXT, "ok", 5, 0, 0, 6);
      m_lstPicture.SetItem(i, 8, LVIF_IMAGE |  LVIF_TEXT, "ok", 6, 0, 0, 6);
     }

     

    在显示的时候,我发现只有第2、3、4、5、6显示图片,其他的都空白。而且图片显示的列有问题,就是bitmap7的显示在第4列

    2011年5月12日 2:01

答案

  • 我试了一下您的代码,没有问题。会不是您这里的问题呢?
    bmp.LoadBitmap(IDB_BITMAP9);
     。。。
    bmp.LoadBitmap(IDB_BITMAP8);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 神秘人 2011年5月16日 11:23
    2011年5月13日 3:48
    版主
  • 示例程序已发送到您的邮箱了,请注意查收!


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 神秘人 2011年5月16日 11:23
    2011年5月15日 13:12
    版主

全部回复

  • 您的CImageList中加了5个bitmap,索引从0 - 5,您最下面的for语句中SetItem的时候指定的索引却不是从0 - 5,您写的是从0 - 6


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年5月12日 2:53
    版主
  • 谢谢,您指出的这个问题是我的疏忽,是我在修改的时候忘记修改的,但是,当我改为下面的时候,

      m_lstPicture.SetItem(i, 8, LVIF_IMAGE | LVIF_TEXT, "ok", 5, 0, 0, 6);
    问题依旧,请再忙考虑一下。

    2011年5月12日 5:08
  • 我试了一下您的代码,没有问题。会不是您这里的问题呢?
    bmp.LoadBitmap(IDB_BITMAP9);
     。。。
    bmp.LoadBitmap(IDB_BITMAP8);


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 神秘人 2011年5月16日 11:23
    2011年5月13日 3:48
    版主
  • 谢谢VisualEleven。这个问题我还是没有解决,暂时放下了。但是我还是要解决的,我改了但是问题依旧,版主是否可以把你实验的代码发给我研究一下,比较一下我哪里出的错误?我的邮箱是yanghj11@163.com.再次感谢。
    2011年5月14日 3:22
  • 示例程序已发送到您的邮箱了,请注意查收!


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    • 已标记为答案 神秘人 2011年5月16日 11:23
    2011年5月15日 13:12
    版主