CImagetListWapper.h
#pragma once
class CImagetListWapper
{
public:
CImagetListWapper();
~CImagetListWapper();
void Initail(const char* UserHeadName);
public:
CImageList m_largeImageList;
CImageList m_smallImageList;
CString m_customfacedir;
void SetCustomFaceDir(unsigned long uin);
};
CImagetListWapper.cpp
#include "StdAfx.h"
#include "imagetlistwapper.h"
#define NR_PICS_PER_FACE 3
#define NR_FACES 84
#define TOTAL_FACES (NR_PICS_PER_FACE * NR_FACES)
CImagetListWapper::CImagetListWapper()
{
m_largeImageList.Create(32, 32, ILC_COLORDDB | ILC_MASK, TOTAL_FACES+3, 3);
m_smallImageList.Create(16, 16, ILC_COLORDDB | ILC_MASK, TOTAL_FACES+3, 3);
}
CImagetListWapper::~CImagetListWapper()
{
}
void CImagetListWapper::Initail(const char* UserHeadName)
{
if (UserHeadName == NULL)
return;
while(m_largeImageList.GetImageCount())
{
m_largeImageList.Remove(0);
}
while(m_smallImageList.GetImageCount())
{
m_smallImageList.Remove(0);
}
int nm = m_largeImageList.GetImageCount();
COLORREF crMask = RGB(215,232,247);
char path[MAX_PATH] = {0};
GetModuleFileName(NULL,path,MAX_PATH);
CString str = path;
int n = str.ReverseFind('\\');
str = str.Left(n+1);
CString strFile;
for (int i = 1; i <= NR_PICS_PER_FACE; i++) {
for (int j = 1; j <= NR_FACES; j++) {
strFile.Format(str + "face\\small\\%d-%d.bmp", j, i);
HBITMAP hbmLarge = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), strFile,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HBITMAP hbmSmall = (HBITMAP) ::CopyImage(hbmLarge, IMAGE_BITMAP, 16, 16, 0);
m_largeImageList.Add(CBitmap::FromHandle(hbmLarge), crMask);
m_smallImageList.Add(CBitmap::FromHandle(hbmSmall), crMask);
DeleteObject(hbmLarge);
DeleteObject(hbmSmall);
}
}
if (UserHeadName == NULL || strlen(UserHeadName) == 0)
return;
strFile = m_customfacedir + "\\headface\\" + UserHeadName + "S.bmp";
CFileFind filefind;
if (filefind.FindFile(strFile))
{
HBITMAP hbmLarge = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), strFile,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HBITMAP hbmSmall = (HBITMAP) ::CopyImage(hbmLarge, IMAGE_BITMAP, 16, 16, 0);
m_largeImageList.Add(CBitmap::FromHandle(hbmLarge), crMask);
m_smallImageList.Add(CBitmap::FromHandle(hbmSmall), crMask);
DeleteObject(hbmLarge);
DeleteObject(hbmSmall);
}
strFile = m_customfacedir + "headface\\" + UserHeadName + "SG.bmp";
if (filefind.FindFile(strFile))
{
HBITMAP hbmLarge = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), strFile,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HBITMAP hbmSmall = (HBITMAP) ::CopyImage(hbmLarge, IMAGE_BITMAP, 16, 16, 0);
m_largeImageList.Add(CBitmap::FromHandle(hbmLarge), crMask);
m_smallImageList.Add(CBitmap::FromHandle(hbmSmall), crMask);
DeleteObject(hbmLarge);
DeleteObject(hbmSmall);
}
strFile = m_customfacedir + "headface\\" + UserHeadName + "S.bmp";
if (filefind.FindFile(strFile))
{
HBITMAP hbmLarge = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(), strFile,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
HBITMAP hbmSmall = (HBITMAP) ::CopyImage(hbmLarge, IMAGE_BITMAP, 16, 16, 0);
m_largeImageList.Add(CBitmap::FromHandle(hbmLarge), crMask);
m_smallImageList.Add(CBitmap::FromHandle(hbmSmall), crMask);
DeleteObject(hbmLarge);
DeleteObject(hbmSmall);
}
}
void CImagetListWapper::SetCustomFaceDir(unsigned long uin)
{
char path[MAX_PATH] = {0};
GetModuleFileName(NULL,path,MAX_PATH);
CString str = path;
int n = str.ReverseFind('\\');
str = str.Left(n+1);
CString struin;
struin.Format("\\%lu\\",uin);
m_customfacedir = str + struin;
}
XX.OnInitDialog
m_imagetlistwapper.Initail("E:\\xxxxx");
m_combo.SetImageList(&m_imagetlistwapper.m_largeImageList);
COMBOBOXEXITEM cbi;
ZeroMemory(&cbi, sizeof(cbi));
for (int i = 0; i < 84; i++) {
cbi.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;
cbi.iItem = i;
cbi.iImage =cbi.iSelectedImage=i;
m_combo.InsertItem(&cbi);
}
m_combo.SetCurSel(0);