Ordnerauswahldialog
-
Hallo
wie macht man so einen Dialog wo man einen Ordner auswählen kann?
oder muss ich da in das WinApi forum?mfg burnner
-
Nein, die WinAPI Programmierer kommen zu dir
Nimm SHBrowseForFolder.
-
ok Thx!
werd's versuchen
-
BOOL BrowseForFolder(CString &ret,HWND m_hWnd)// parent hwnd { BROWSEINFO br; ZeroMemory(&br,sizeof(br)); br.hwndOwner=m_hWnd; br.lpszTitle="Wählen Sie den Ordner !"; br.ulFlags=BIF_DONTGOBELOWDOMAIN|BIF_RETURNONLYFSDIRS; LPITEMIDLIST itidl=SHBrowseForFolder(&br); if(!itidl) return FALSE; char path[255]; SHGetPathFromIDList(itidl,path); CString b; b=path; if(b.Right(1)=="\\") ret.Format("%s",path); else ret.Format("%s\\",path); return TRUE; }
-
@Cplusplus
Das gibt ein Speicherleck!
So ist's besser://=========================================================================== // BrowseCallbackProc //=========================================================================== // // Description: // Select an initial folder // //=========================================================================== static int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { if(uMsg == BFFM_INITIALIZED) { // Path is in (LPCTSTR)lpData SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); } return 0; } //=========================================================================== // BrowseFolder //=========================================================================== // // Description: // Browses for a folder // // Parameters: // CString& rFolder // This parameter receives the selected folder. // It is also the initial folder. // // UINT uiTitle // ID of the title (will be loaded from resources) // // CWnd* pParent = 0 // Parent window // // Return value: // bool // true if the user clicked OK. // false if the user cancelled. rFolder will remain unchanged. // //=========================================================================== bool BrowseFolder(CString& rFolder, UINT uiTitle, CWnd* pParent) { LPITEMIDLIST pidlSelected = NULL; BROWSEINFO bi = {0}; // Get memory interface CComPtr<IMalloc> pMalloc; SHGetMalloc(&pMalloc.p); ASSERT(pMalloc.p != NULL); if(!pMalloc.p) return false; // Load dialog title CString sTitle; VERIFY(sTitle.LoadString(uiTitle)); // Set parameters for SHBrowseForFolder bi.hwndOwner = (pParent ? pParent : AfxGetMainWnd())->GetSafeHwnd(); bi.pidlRoot = NULL; bi.pszDisplayName = NULL; bi.lpszTitle = sTitle; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; bi.lpfn = BrowseCallbackProc; bi.lParam = (LPARAM)(LPCTSTR)rFolder; pidlSelected = SHBrowseForFolder(&bi); // SHBrowseForFolder returns NULL if the user clicked cancel if(pidlSelected == NULL) return false; try { // Get path from IDList. The path is copied so rFolder // remains unchanged if SHGetPathFromIDList fails CString sFolderPath; BOOL bSuccess = SHGetPathFromIDList(pidlSelected, sFolderPath.GetBuffer(2048)); sFolderPath.ReleaseBuffer(); // Free IDList pMalloc->Free(pidlSelected); pidlSelected = 0; if(bSuccess) { rFolder = sFolderPath; return true; } else { return false; } } catch(...) { pMalloc->Free(pidlSelected); throw; } }
-
als erfahrener winapi-progger sach ich nur
SHBrowseForFolder (...);
-
LUZA schrieb:
als erfahrener winapi-progger sach ich nur
SHBrowseForFolder (...);
Nicht nur erfahren sondern auch saulahm, wa?
-
scheisse, was habbich denn fürn ping???
-
jojo Danke euch allen
-
hmmm..
CString x;
BrowseFolder(x,(UINT)"hallo",0);Das hier gibt ein Error wen das Programm läuft...
-
burnner schrieb:
hmmm..
CString x;
BrowseFolder(x,(UINT)"hallo",0);Der 2. Parameter der Fkt. muss die ID# des Ressources sein (String Table)
-
Ah ok..
Funktioniert! Vielen Dank!