自己封装的CListCtrl,主要用来显示图片
ImageListCtrl.H
#pragma once
#define IMAGEPATH _T("appdata\\Image\\")
// CImageListCtrl
class CImageListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CImageListCtrl)
public:
CImageListCtrl();
virtual~CImageListCtrl();
CImageList m_ImageList;
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
// 添加图片
void AddImage(CString imgPath);
void DelImage(CString imgPath);
void RemoveAllImg(void);
// 获得当前显示所有图片的路径
void GetImgPathList(CStringList& strListPath);
BOOL InitCtrl(void);
int m_nNum;
afx_msg void OnDestroy();
CString DeleteCurItem(void);
};
ImageListCtrl.CPP
// ImageListCtrl.cpp : 实现文件
//
#include "stdafx.h"
//#include "JwGuard.h"
#include "ImageListCtrl.h"
#include "ximage.h"
// CImageListCtrl
IMPLEMENT_DYNAMIC(CImageListCtrl, CListCtrl)
CImageListCtrl::CImageListCtrl()
{
m_nNum =0;
}
CImageListCtrl::~CImageListCtrl()
{
m_ImageList.DeleteImageList();
}
BEGIN_MESSAGE_MAP(CImageListCtrl, CListCtrl)
ON_WM_CREATE()
ON_WM_DESTROY()
END_MESSAGE_MAP()
// CImageListCtrl 消息处理程序
int CImageListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CListCtrl::OnCreate(lpCreateStruct) ==-1)
return-1;
// TODO: 在此添加您专用的创建代码
return0;
}
// 添加图片
void CImageListCtrl::AddImage(CString imgPath)
{
CString strEnd = imgPath.Right(3);
strEnd.MakeLower();
if(strEnd.Compare(_T("jpg")) ==0||strEnd.Compare(_T("gif")) ==0||strEnd.Compare(_T("bmp")) ==0||strEnd.Compare(_T("png")) ==0)
{
CxImage img;
bool bResult;
if(strEnd.Compare(_T("jpg")) ==0)
bResult = img.Load(imgPath,CXIMAGE_SUPPORT_JPG);
elseif(strEnd.Compare(_T("png")) ==0)
bResult = img.Load(imgPath,CXIMAGE_SUPPORT_PNG);
elseif(strEnd.Compare(_T("gif")) ==0)
bResult =img.Load(imgPath,CXIMAGE_SUPPORT_GIF);
elseif(strEnd.Compare(_T("bmp")) ==0)
bResult =img.Load(imgPath,CXIMAGE_SUPPORT_BMP);
//如果加载失败
if(!bResult)
return;
CClientDC cdc(this);
HDC hDC=::CreateCompatibleDC(cdc.m_hDC);
HBITMAP bm = CreateCompatibleBitmap(cdc.m_hDC, 100, 90);
HBITMAP pOldBitmapImage = (HBITMAP)SelectObject(hDC,bm);
BOOL bRe = img.Draw(hDC,0,0,100,90);
HDC sdc = ::GetDC(0);
//CBitmap bitmap;
//bitmap.Attach(bm);
HBITMAP hMonoBitmap = CreateBitmap(100,90,1,1,NULL);
ICONINFO icf;
icf.fIcon = FALSE;
icf.hbmMask = hMonoBitmap;
icf.hbmColor = bm;
icf.xHotspot =0;
icf.yHotspot =0;
HICON hicon = CreateIconIndirect(&icf);
int nResult = m_ImageList.Add(hicon);
//m_ImageList.Replace(nIndex,&bitmap,NULL);
//插入行
int nIndex = imgPath.ReverseFind(_T('.'));
imgPath.SetAt(nIndex,_T('\0'));
int nIndex1= imgPath.ReverseFind(_T('\\'));
CString strFileName = imgPath.Right(imgPath.GetLength() - (nIndex1+1));
InsertItem(m_nNum,strFileName,nResult);
SetItemData(m_nNum,(DWORD_PTR)wcsdup(imgPath));
RedrawItems(m_nNum, m_nNum);
::SelectObject(hDC,pOldBitmapImage);
::DeleteDC(hDC);
m_nNum++;
}
}
void CImageListCtrl::DelImage(CString imgPath)
{
int nCount = GetItemCount();
for (int i=0;i<nCount;i++)
{
char*pData = (char*)GetItemData(i);
if(pData!=NULL)
{
CString str;
str.Format(_T("%s"),pData);
str = str.Trim();
if(str.CompareNoCase(imgPath) ==0)
{
free(pData);
DeleteItem(i);
}
}
}
}
void CImageListCtrl::RemoveAllImg(void)
{
int nCount = GetItemCount();
for (int i=0;i<nCount;i++)
{
char*pData = (char*)GetItemData(i);
if(pData!=NULL)
free(pData);
}
DeleteAllItems();
m_nNum =0;
}
// 获得当前显示所有图片的路径
void CImageListCtrl::GetImgPathList(CStringList& strListPath)
{
int nCount = GetItemCount();
strListPath.RemoveAll();
for (int i=0;i<nCount;i++)
{
char*pData = (char*)GetItemData(i);
if(pData!=NULL)
{
CString str;
str.Format(_T("%s"),pData);
str = str.Trim();
strListPath.AddTail(str);
}
}
}
BOOL CImageListCtrl::InitCtrl(void)
{
if(!m_ImageList.Create(100, 90, ILC_COLOR24, 1, 1))
{
return FALSE;
}
DeleteAllItems();
m_ImageList.SetBkColor(RGB(125,125,0));
if(SetImageList(&m_ImageList, LVSIL_NORMAL) == NULL)
{
return FALSE;
}
return TRUE;
}
void CImageListCtrl::OnDestroy()
{
CListCtrl::OnDestroy();
int nCount = GetItemCount();
for (int i=0;i<nCount;i++)
{
char*pData = (char*)GetItemData(i);
if(pData!=NULL)
free(pData);
}
// TODO: 在此处添加消息处理程序代码
}
CString CImageListCtrl::DeleteCurItem(void)
{
//DeleteItem();
int nIndex = GetNextItem(-1,LVNI_SELECTED);
char*pData = (char*)GetItemData(nIndex);
CString strDelPath;
strDelPath.Format(_T("%s"),pData);
if(pData!=NULL)
free(pData);
DeleteItem(nIndex);
return strDelPath;
}
有什么bug记得留言啊 别光用。。。。。。兄弟们