您的位置:首页 > 其它

一个图片加载类

2008-07-06 22:48 169 查看

#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, 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;


}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: