SOMS/test/XuAilibTest/BrowseForFolder.cpp

33 lines
1020 B
C++
Raw Permalink Normal View History

2024-07-15 10:31:26 +08:00
#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;
}