C++ 기본 컴포넌트는 지원을 하지 않지만, JVCL 등의 여러 컴포넌트에서 폴더 선택 다이얼로그를 지원합니다만, 컴포넌트를 설치해야 되고, 귀찮죠.
제가 예전에 만든함수인데, 응용해서 사용하면 됩니다.
#include
bool ShowDirSelectDlg( HWND hWndOwner, wchar_t *szDir )
{
LPMALLOC ShellMalloc;
LPITEMIDLIST idRoot, idBrowse;
BROWSEINFO BrowseInfo;
wchar_t* shBuff;
wchar_t szPath[MAX_PATH];
szPath[0] = '\0' ;
if (SHGetMalloc(&ShellMalloc) == NOERROR) {
SHGetSpecialFolderLocation(0, CSIDL_DRIVES, &idRoot);
shBuff = (wchar_t*)ShellMalloc->Alloc(MAX_PATH);
if (shBuff){
BrowseInfo.hwndOwner = hWndOwner;
BrowseInfo.pidlRoot = idRoot;
BrowseInfo.pszDisplayName = shBuff;
BrowseInfo.lpszTitle = L"아래 목록에서 원하는 폴더를 선택하세요." ;
BrowseInfo.ulFlags = BIF_DONTGOBELOWDOMAIN;
BrowseInfo.lpfn = NULL;
BrowseInfo.lParam = 0;
idBrowse = SHBrowseForFolder(&BrowseInfo);
if (idBrowse) SHGetPathFromIDList(idBrowse, szPath);
}
ShellMalloc->Free(shBuff);
ShellMalloc->Free(idBrowse);
ShellMalloc->Free(idRoot);
}
ShellMalloc->Release();
int nLen = wcslen( szPath );
if( nLen > 0 ){
wcscpy( szDir, szPath );
if( szPath[nLen-1] != '\\' ) wcscat( szDir, L"\\");
return true;
}else{
return false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
wchar_t szPath[MAX_PATH];
if( ShowDirSelectDlg( Handle, szPath ) )
Caption = szPath;
}
경로지정 님이 쓰신 글 :
: 경로지정 해야하는 일이 생겼는데요....
:
: 그래서 여기저기 찾아보니 DirectoryListBox 라고 있던데...
:
: UI도 그렇고 좀 쓰기도 불편하고 그렇더라구요..
:
: 그런데 빌더에서 경로 지정 해줄때 보니 사용자가 사용하기 쉽게 경로 지정 할 수 있는
:
: 다이알로그 창이 뜨더라구요.. 그래서 그런데
:
: 그 다이알로그 창을 뛰우려면 어떻게 해야하나요??
:
: 그리고 경로 값을 어떻게 받아오는지도 설명 부탁드립니다 ^^
:
: 첨부파일에 해당 다이알로그 창 그림이 있습니다. 참고하세요~~
|