一个图片加载类
#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();
};
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, 0, 0, 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, 0, 0, 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;
}
{
}
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, 0, 0, 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, 0, 0, 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;
}
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
posted on 2008-07-06 22:17 Phinecos(洞庭散人) 阅读(632) 评论(0) 编辑 收藏 举报