CComboBoxEx 添加图片
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);