質問
MFCでは、フォルダを開く]ダイアログはありますか?つまり、かなりのファイル名を選択するよりも、それはフォルダ名が選択されますか?理想的には、私は非常に多く、通常のファイルダイアログのように見えた、それは「プロジェクトの場所」(新規プロジェクトを作成する)ために移動するときにVisual Studioがそれをしない方法であることにしたいと思います。しかし、私はインターフェイスの垂直ツリーのソートの一つで間に合わせることができ前者は存在しない場合ます。
解決
このコードはあなたに開いているフォルダのダイアログが表示されます(これは、ウェブ上のどこかから取ったが、私は本当にどこかわからない)。
CString szSelectedFolder = _T("");
// This is the recommended way to select a directory
// in Win95 and NT4.
BROWSEINFO bi;
memset((LPVOID)&bi, 0, sizeof(bi));
TCHAR szDisplayName[_MAX_PATH];
szDisplayName[0] = '\0';
bi.hwndOwner = GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = szDisplayName;
bi.lpszTitle = _T("Select a folder");
bi.ulFlags = BIF_RETURNONLYFSDIRS;
// Set the callback function
bi.lpfn = BrowseCallbackProc;
LPITEMIDLIST pIIL = ::SHBrowseForFolder(&bi);
TCHAR szReturnedDir[_MAX_PATH];
BOOL bRet = ::SHGetPathFromIDList(pIIL, (TCHAR*)&szReturnedDir);
if (bRet)
{
if (szReturnedDir != _T(""))
{
szSelectedFolder = szReturnedDir;
}
LPMALLOC pMalloc;
HRESULT HR = SHGetMalloc(&pMalloc);
pMalloc->Free(pIIL);
pMalloc->Release();
}
あなたも、このコールバック関数を実装する必要があります:
TCHAR szInitialDir[_MAX_PATH];
// Set the initial path of the folder browser
int CALLBACK BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
// Look for BFFM_INITIALIZED
if (uMsg == BFFM_INITIALIZED)
{
SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)szInitialDir);
}
return 0;
}
所属していません StackOverflow