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);

转载于:https://www.cnblogs.com/staring-hxs/archive/2013/03/18/2965560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值