CListCtrl 实现缩略图并具备点击查看全图功能

1.声明一个CImagelist和CListCtrl对象

   CImagelist* pImageList = new CImageList;

   CListCtrl* m_ListCtrl;

 

2.pImageList->Create(PicWidth,PicHeight, ILC_COLOR32, PicNum, 0);  
  m_ListCtrl.SetImageList(pImageList,LVSIL_NORMAL); //将CImagelist与CListCtrl绑定
  m_ListCtrl.DeleteAllItems();//先清除已有的
  m_ListCtrl.SetIconSpacing(CSize(125,5));    
  for (int i=0;i<PicNum;i++)
  {
   if( !f.Open(PicPath, CFile::modeRead)){
    hBitmap = (HBITMAP)LoadImage(NULL,PicPath,IMAGE_BITMAP,110,83,
     LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); //加载成缩略图
   }
   pBitmap[i].Attach(hBitmap); 
   pImageList->Add(&pBitmap[i],RGB(0,0,0));//添加图片到CImagelist中
   int x = m_ListCtrl.InsertItem(i,NULL,i);    

  m_BmpPathMap.SetAt(i,PicPath);//将图片路径保存到CMap中,为点击看大图使用  
  }

执行步骤二,已经将图片添加的ListCtrl控件中了,这样图片就可以在Listctrl控件上显示出来了

 

3.点击一个缩略图,看大图:

(1)需要注册这样一个事件: ON_NOTIFY(LVN_ITEMCHANGED, IDC_LISTCTRL,   OnItemchangedListctrl);

(2) OnItemchangedListctrl的实现函数如下:

void CDXCaptureDlg::OnItemchangedListctrl(NMHDR* pNMHDR, LRESULT* pResult)
{
 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
 // TODO: Add your control notification handler code here
 if(pNMListView->uChanged==LVIF_STATE)
 {
  if(pNMListView->uNewState & LVIS_SELECTED)
  {
     int nItem=pNMListView->iItem;
   CString path;
   m_BmpPathMap.Lookup(nItem,path);
   ShowImg(path);
  }
 }

 *pResult = 0;
}

4.实现的效果如图所示:

你可能感兴趣的:(CListCtrl 实现缩略图并具备点击查看全图功能)