列表控件控制变量,下面三个变量都是成员变量
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
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
==============
别在OnInitDialog中处理,因为在OnInitDialog中控件可能还没有显示出来,所以在这里对控件进行初始化可能会显示不出来。
一般的方法是在OnInitDialog的最后,return之前用PostMessage(WM_AAAA,0,0);发送一个自定义消息,在自定义消息中进行CListCtrl的初始化显示工作。
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就可以了……
m_imagesList.GetImageCount() is = 2
m_listCtrl_blog.GetItemCount() is = 0
实在是很正常啊,你还打算让它如何?
代码如下:
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
点上面链接下载QQ界面源代码。包含了好友列表。