列表控件控制变量,下面三个变量都是成员变量
CListCtrl m_listCtrl_blog;
CImageList m_imagesList;
CBitmap bmp;
下面是我在BOOL CmainDlg::OnInitDialog()的代码,要实现向CListCtrl 中插入CImageList,同时显示出图片,
但是图片就是显示不出来,我打印了调试信息,发现打印是m_listCtrl_blog.GetItemCount() is = 0,但是我很奇怪,
想不通为什么。所以把这个怪异的问题放在这,希望能有人能解决,送20分;
希望能一起学习,共同发现开发中遇见的问题
int nErr = m_imagesList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);//最好用这样,否则图标不透明很难看
if(nErr != 0)
printf("成功调用 m_imagesList.Create nErr = %d\n",nErr); //CBitmap bmp;
nErr = bmp.LoadBitmap(IDB_BITMAP2); if(nErr != 0)
printf("成功调用 bmp.LoadBitmap nErr = %d\n",nErr);
//m_imagesList.Add(&bmp,RGB(0, 0, 0)); nErr = m_imagesList.Add(&bmp,ILC_COLOR8|ILC_MASK);
printf("1 m_imagesList.Add nErr = %d\n",nErr); nErr = m_imagesList.Add(&bmp,ILC_COLOR8|ILC_MASK);
printf("2 m_imagesList.Add nErr = %d\n",nErr); bmp.DeleteObject(); nErr = m_imagesList.GetImageCount();
printf("m_imagesList.GetImageCount() is = %d\n",nErr);
//HBITMAP hBmpMenuBack = LoadBitmapW(0, MAKEINTRESOURCE(IDB_BITMAP2));
//   //m_bmpMenuBack.Attach(hBmpMenuBack);
//bmp.Attach(hBmpMenuBack); //HICON m_hIcon;
//m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON2);
//m_images.Add(m_hIcon);
//m_listCtrl_blog.SetItemText(m_listCtrl_blog.GetItemCount(),1,(LPCTSTR)"fdfadf"); /*m_listCtrl_blog.SetImageList(&m_imagesList,LVS_REPORT);
m_listCtrl_blog.SetImageList(&m_imagesList,LVSIL_SMALL);
m_listCtrl_blog.SetImageList(&m_imagesList,LVSIL_NORMAL);*/
m_listCtrl_blog.SetImageList(&m_imagesList,LVSIL_STATE);
nErr = m_listCtrl_blog.GetItemCount();
printf("m_listCtrl_blog.GetItemCount() is = %d\n",nErr);
打印结果为
成功调用 m_imagesList.Create nErr = 1
成功调用 bmp.LoadBitmap nErr = 1
= 1
1 m_imagesList.Add nErr = 0
2 m_imagesList.Add nErr = 1
m_imagesList.GetImageCount() is = 2
m_listCtrl_blog.GetItemCount() is = 0

解决方案 »

  1.   

    下面是我在BOOL CmainDlg::OnInitDialog()的代码,要实现向CListCtrl 中插入CImageList,同时显示出图片,
    ==============
    别在OnInitDialog中处理,因为在OnInitDialog中控件可能还没有显示出来,所以在这里对控件进行初始化可能会显示不出来。
    一般的方法是在OnInitDialog的最后,return之前用PostMessage(WM_AAAA,0,0);发送一个自定义消息,在自定义消息中进行CListCtrl的初始化显示工作。
      

  2.   

    你的代码里根本就没有m_listCtrl_blog.InsertItem().没有插入行,是看不到图标滴啊。
      

  3.   

    CImageList *imglist = new CImageList;
    imglist->Create(16,16,ILC_COLOR,16,16); 
    imglist->Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME)); m_listCtrl_blog.InsertItem(count,(LPCTSTR)""); 
    m_listCtrl_blog.SetImageList(imglist,LVSIL_SMALL); 
    m_listCtrl_blog.SetItem(count,0,LVIF_IMAGE,(LPCTSTR)"",0,0,0,0);
    LoadIcon() 里面的IDR_****可以自己手动添加上去,再去Load就可以了……
      

  4.   

    你放了两个Bitmap到ImageList,但没有向ListCtrl里添加Item,所以
    m_imagesList.GetImageCount() is = 2
    m_listCtrl_blog.GetItemCount() is = 0
    实在是很正常啊,你还打算让它如何?
      

  5.   

    恩,说的有道理。但是我改了,结果还是显示不出来,我很奇怪
    代码如下:
    m_listCtrl_blog.SetExtendedStyle(LVS_EX_FULLROWSELECT /*| LVS_EX_GRIDLINES */| LVS_EX_INFOTIP | LVS_EX_CHECKBOXES);
    m_listCtrl_blog.SetBkColor(RGB(255,255,255));
    m_listCtrl_blog.SetTextBkColor(RGB(255,255,255));
    m_listCtrl_blog.SetTextColor(RGB(0,0,255));
    //m_listCtrl_blog.ModifyStyle(NULL,LVS_REPORT); //插入图片
    //最好用这样,否则图标不透明很难看
    //int nErr = m_imagesList.Create(32,32,ILC_COLOR8|ILC_MASK,9,9); //最好用这样,否则图标不透明很难看
    int nErr = m_imagesList.Create(32,32,ILC_COLOR24|ILC_MASK,1,1);
    if(nErr != 0)
    printf("成功调用 m_imagesList.Create nErr = %d\n",nErr); nErr = bmp.LoadBitmap(IDB_BITMAP2); if(nErr != 0)
    printf("成功调用 bmp.LoadBitmap nErr = %d\n",nErr);
    //m_imagesList.Add(&bmp,RGB(0, 0, 0)); nErr = m_imagesList.Add(&bmp,ILC_COLOR8|ILC_MASK);
    printf("1 m_imagesList.Add nErr = %d\n",nErr); nErr = m_imagesList.Add(&bmp,ILC_COLOR8|ILC_MASK);
    printf("2 m_imagesList.Add nErr = %d\n",nErr); nErr = m_imagesList.GetImageCount();
    printf("m_imagesList.GetImageCount() is = %d\n",nErr); //HICON m_hIcon;
    //m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON2);
    //m_images.Add(m_hIcon);
    //m_listCtrl_blog.SetItemText(m_listCtrl_blog.GetItemCount(),1,(LPCTSTR)"fdfadf"); //添加列
    m_listCtrl_blog.InsertColumn(0,_T("好友头像"),LVCFMT_LEFT,115);
    m_listCtrl_blog.InsertColumn(1,_T("好友最新动态"),LVCFMT_LEFT,115); //添加行
    m_listCtrl_blog.InsertItem(0,(LPCTSTR)"我心情很好"); //一般用两个参数那个就可以了,第一个是行号,第二个是文本内容
    m_listCtrl_blog.InsertItem(1,(LPCTSTR)"我心情不好"); //m_listCtrl_blog.SetImageList(&m_imagesList,LVS_REPORT);
    m_listCtrl_blog.SetImageList(&m_imagesList,LVSIL_SMALL);
    //m_listCtrl_blog.SetImageList(&m_imagesList,LVSIL_NORMAL);
    //m_listCtrl_blog.SetItem(0,0,LVIF_IMAGE,(LPCTSTR)"",0,0,0,0);
    //m_listCtrl_blog.SetItem(0,0,LVIF_IMAGE, NULL, 1, 0, 0, 0 );
    nErr = m_listCtrl_blog.GetItemCount();
    printf("m_listCtrl_blog.GetItemCount() is = %d\n",nErr); BOOL res = m_listCtrl_blog.ShowWindow(SW_SHOW); bmp.DeleteObject();
    -----------------------------------------
    输出结果为:
    成功调用 m_imagesList.Create nErr = 1
    成功调用 bmp.LoadBitmap nErr = 1
    = 1
    1 m_imagesList.Add nErr = 0
    2 m_imagesList.Add nErr = 1
    m_imagesList.GetImageCount() is = 2
    m_listCtrl_blog.GetItemCount() is = 2
      

  6.   

    http://www.iuishop.com/index.php?option=com_docman&task=cat_view&gid=39&&Itemid=54http://www.iuishop.com/index.php?option=com_docman&task=cat_view&gid=39&&Itemid=54
    点上面链接下载QQ界面源代码。包含了好友列表。
      

  7.   

    问题已经解决了,是的listctrl控件的接受所有者数据,改为false