Frage

In MFC gibt es einen Ordner öffnen Dialog? Das heißt, anstatt einen Dateinamen wählt, wählt es ein Ordnername? Im Idealfall würde Ich mag es, die Art und Weise Visual Studio tut es sein, wenn man für eine „Projekt Location“ Navigation (wenn Sie ein neues Projekt), die wie ein normales Dateidialog sehr viel aussieht. Aber ich konnte href="http://www.experts-exchange.com/images/150159/folder.PNG" rel="nofollow noreferrer"> vertikale Baum der Art von Schnittstellen wenn erstere nicht existiert.

War es hilfreich?

Lösung

Mit diesem Code erhalten Sie einen Ordner öffnet Dialog (dies von irgendwo auf dem Netz genommen wurde, aber ich weiß wirklich nicht, wo).

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();
}

Sie werden auch diese Callback-Funktion implementieren:

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;
}
scroll top