問題背景:需要自動化的連續的處理500張圖,一個一個地處理顯然很幼稚,因此需要一個連續處理圖像的函數。
CString m_strFileOut = _T(""); //初始化適應Unicode
TCHAR szSelected[MAX_PATH];//用來存放文件夾路徑
BROWSEINFO bi;
LPITEMIDLIST pidl;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szSelected;
bi.lpszTitle = _T("選擇輸出文件路徑");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = NULL;
bi.iImage = NULL;
if((pidl = SHBrowseForFolder(&bi)) != NULL)
{
if(SUCCEEDED(SHGetPathFromIDList(pidl, szSelected))) //得到文件夾的全路徑,不要的話,只得本文件夾名
{
m_strFileOut = szSelected; //獲得文件夾的全路徑
}
}
執行完這段代碼後m_strFileOut就保存了文件夾路徑名。
/******************************************************************
* 函數名:EnumFiles
* 參數 :LPCTSTR lpPath 目標文件夾, LPCTSTR lpExt 要搜索的文件
名,留空表示所有文件
* 返回值:是否找到
* 功能描述:示例:EnumFiles("C:\\windows\\system32", "*.dll");
******************************************************************
bool EnumFiles(LPCTSTR lpPath, LPCTSTR lpExt)
{
char szFindCmd[MAX_PATH] = "";
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
if (lpExt == NULL)
{
sprintf(szFindCmd, "%s\\*.*", lpPath);
}
else
{
sprintf(szFindCmd, "%s\\%s", lpPath, lpExt);
}
hFind = ::FindFirstFile(szFindCmd, &FindFileData);
if(INVALID_HANDLE_VALUE == hFind)
return FALSE;
while(TRUE)
{
if(! (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// 找到的是文件,而不是文件夾
char szBuffer[MAX_PATH] = "";
sprintf(szBuffer, "%s\\%s", lpPath, FindFileData.cFileName);
// 找到的文件的路徑是szBuffer,在這裏加入你的圖像處理代碼
CString str;
str = szBuffer;
m_MyDib.LoadFile(str);
}
if(!FindNextFile(hFind,&FindFileData))
break;
}
FindClose(hFind);
return TRUE;
}