33 lines
1020 B
C++
33 lines
1020 B
C++
![]() |
#include "BrowseForFolder.h"
|
|||
|
#include <Windows.h>
|
|||
|
#include <ShlObj.h>
|
|||
|
#include <string>
|
|||
|
#include <Commdlg.h>
|
|||
|
using namespace std;
|
|||
|
int BrowseForFolder::SelectFile(string& path)
|
|||
|
{
|
|||
|
TCHAR szBuffer[MAX_PATH] = { 0 }; //<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
BROWSEINFO bi;
|
|||
|
ZeroMemory(&bi, sizeof(BROWSEINFO));
|
|||
|
bi.hwndOwner = NULL;
|
|||
|
bi.pszDisplayName = szBuffer;
|
|||
|
bi.lpszTitle = _T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>:"); //_T()<29><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>tchar.h<>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>궨<EFBFBD>塣
|
|||
|
bi.ulFlags = BIF_BROWSEINCLUDEFILES;
|
|||
|
LPITEMIDLIST idl = SHBrowseForFolder(&bi); //<2F><>ʼѡ<CABC><D1A1><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
if (NULL == idl)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
}
|
|||
|
SHGetPathFromIDList(idl, szBuffer); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>szBufferֻ<72><D6BB><EFBFBD>洢<EFBFBD><E6B4A2>ǰѡ<C7B0><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
path = TCHAR2STRING(szBuffer);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
std::string BrowseForFolder::TCHAR2STRING(TCHAR* STR)
|
|||
|
{
|
|||
|
int iLen = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, NULL);
|
|||
|
char* chRtn = new char[iLen * sizeof(char)];
|
|||
|
WideCharToMultiByte(CP_ACP, 0, STR, -1, chRtn, iLen, NULL, NULL);
|
|||
|
std::string str(chRtn);
|
|||
|
delete chRtn;
|
|||
|
return str;
|
|||
|
}
|