一个图片加载类

复制代码
#include <vector>

class CImageLoader  
{
  
protected:
    
/// Full path were the images and icons are stored
    CString m_sPath;
    
/// List with all the Bmp found in m_sPath
    std::vector<CString> m_BmpNameList;
    
/// List with all the ico found in m_sPath
    std::vector<CString> m_IcoNameList;

    
/**
     * If fills the a_fileList with all the files with extension a_sExtension
     * found int the path m_sPath
     * @param a_fileList: std::vector<CString>& where the file names will be stored
     * @param a_sExtension: CString with the extension of the files to found
     * @return bool true if all ok
     
*/

    
bool GetFiles(std::vector<CString>& a_fileList, CString a_sExtension);

  
public:
    CImageLoader();
    
~CImageLoader();

    
/*
     * Load a bitmap into the static
     * @param a_Static: CStatic* in which the bitmap will be loaded
     * @param a_iIndex: int with the index of bitmap to load. If it is -1
     *  then it will take one bmp randomly. Default value: -1
     * @return bool indicating if it load the bitmap correctly.
     
*/

    
bool SetBitmap(CStatic* a_Static, int a_iIndex = -1);

    
/**
     * Change the actual cursor for a new ico that is in the
     * @param a_iIndex: int position in the array. If it is -1 then it will take one
     * bmp randomly. Default value -1.
     
*/

    
void NewCursor(int a_iIndex = -1);

    
/**
     * It returns a name of a Bmp.
     * @param a_iIndex: int position of the BMP name to return in the array. 
     *  If it is -1 then it will return a name randomly. Default value -1.
     * @return CString with the BMP name
     
*/

    CString GetBmpName(
int a_iIndex = -1);

    
/**
     * It returns a name of a Ico.
     * @param a_iIndex: int position of the ICO name to return in the array. 
     *  If it is -1 then it will return a name randomly. Default value -1.
     * @return CString with the ICO name
     
*/

    CString GetIcoName(
int a_iIndex = -1);

    
/**
     * It return the number of BMP names stored in the attribute m_BmpNameListt
     * @return int with the lengtg of m_BmpNameList
     
*/

    
int GetBmpListSize();

    
/**
     * It return the number of BMP names stored in the attribute m_IcoNameList
     * @return int with the lengtg of m_IcoNameList
     
*/

    
int GetIcoListSize();

    
// Accesors
    /// Write Accesor for m_sPath attribute
    void SetPath(CString a_sPath);
    
/// Read Accesor for m_sPath attribute
    CString GetPath();
}
;
复制代码

复制代码
CImageLoader::CImageLoader()
{
}


CImageLoader::
~CImageLoader()
{

}


bool CImageLoader::GetFiles(std::vector<CString>& a_fileList, CString a_sExtension)
{
    
bool btmpOk;

    
try
    
{
        a_fileList.clear();
        WIN32_FIND_DATA tmpFileFindData;

        
// Found for Path\*.Extension
        CString stmpFiles = m_sPath + CString("*."+ a_sExtension;

        HANDLE tmpHdFind 
= FindFirstFile(stmpFiles, &tmpFileFindData);
        
bool btmpFi = (tmpHdFind == INVALID_HANDLE_VALUE);
        
while (!btmpFi)
        
{
            
// If we found a file and it is not a directory, we put it into the vector.
            CString stmpFileName = tmpFileFindData.cFileName;
            
if (!((tmpFileFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY))
                a_fileList.push_back(m_sPath 
+ stmpFileName);//保存找到的文件
            btmpFi = (FindNextFile(tmpHdFind, &tmpFileFindData) == 0);
        }

        btmpOk 
= true;
    }

    
catch()
    
{
        btmpOk 
= false;
    }


    
return btmpOk;
}


bool CImageLoader::SetBitmap(CStatic* a_Static, int a_iIndex /* = -1 */)
{
    
bool btmpOk;

    
try
    
{
        CString stmpBMP 
= GetBmpName(a_iIndex);

        HANDLE tmphBMP1 
= LoadImage(NULL, stmpBMP, IMAGE_BITMAP, 00, LR_LOADFROMFILE | LR_DEFAULTSIZE);
        HANDLE tmphBMP2 
= a_Static->SetBitmap((HBITMAP)tmphBMP1);
        
if (tmphBMP2 != NULL)
            DeleteObject(tmphBMP2), tmphBMP2 
= NULL;
        a_Static
->CenterWindow();
    }

    
catch()
    
{
        btmpOk 
= false;
    }


    
return btmpOk;
}


void CImageLoader::NewCursor(int a_iIndex /* = -1 */)
{
    CString stmpICO 
= GetIcoName(a_iIndex);

    HANDLE tmphICO 
= LoadImage(NULL, stmpICO, IMAGE_CURSOR, 00, LR_LOADFROMFILE | LR_DEFAULTSIZE);
    
if (tmphICO != NULL)
    
{
        DestroyCursor(GetCursor());
        SetCursor((HICON)tmphICO);
    }

}



CString CImageLoader::GetBmpName(
int a_iIndex /* = -1 */)
{
    CString stmpRes 
= "";
    
if (m_BmpNameList.size() > 0)
    
{
        
int itmpIndex = a_iIndex;
        
if ((itmpIndex < 0)||(itmpIndex >= m_BmpNameList.size()))
            itmpIndex 
= rand()%(m_BmpNameList.size());//随机
        stmpRes = m_BmpNameList[itmpIndex];
    }


    
return stmpRes;
}


CString CImageLoader::GetIcoName(
int a_iIndex /* = -1 */)
{
    CString stmpRes 
= "";
    
if (m_IcoNameList.size() > 0)
    
{
        
int itmpIndex = a_iIndex;
        
if ((itmpIndex < 0)||(itmpIndex >= m_IcoNameList.size()))
            itmpIndex 
= rand()%(m_IcoNameList.size());
        stmpRes 
= m_IcoNameList[itmpIndex];
    }


    
return stmpRes;
}



int CImageLoader::GetBmpListSize()
{
    
return m_BmpNameList.size();
}



int CImageLoader::GetIcoListSize()
{
    
return m_IcoNameList.size();
}


// ACCESSORS
void CImageLoader::SetPath(CString a_sPath)

    m_sPath 
= a_sPath;
    
//确保最后以'\'结束
    if (m_sPath[m_sPath.GetLength()-1!= '\\')
        m_sPath 
+= "\\";

    GetFiles(m_BmpNameList, 
"bmp");
    GetFiles(m_IcoNameList, 
"ico");
}


CString CImageLoader::GetPath() 

    
return m_sPath; 
}


复制代码

posted on   Phinecos(洞庭散人)  阅读(632)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2007-07-06 SWT Designer 6.0安装小记

导航

统计

点击右上角即可分享
微信分享提示