自己封装的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记得留言啊 别光用。。。。。。兄弟们

posted @ 2011-08-11 15:43  银翼的魔术师  阅读(1777)  评论(0编辑  收藏  举报