Alternative zu CFileDialog -> "CFolderDialog"???
-
Hallo!
Ich habe folgendes Problem: Ich wuerde gerne einen Dialog erstellen, der aehnlich wie CFileDialog funktioniert, wo aber nur Verzeichnisse auswaehlbar sind.
Einen Lösungsansatz habe ich im Netz schon gefunden, finde ihn aber wenig intuitiv und nicht sehr elegant...
CFileDialog fd ( TRUE, "", "Verzeichnis wählen", OFN_EXPLORER , "", this ); if ( fd.DoModal == IDOK ) { CString InitDir = fd.GetPathName(); int ipos = InitDir.Find "\\Verzeichnis wählen"); //... rest abschneiden usw.... }
Weiss jemand von euch vielleicht eine bessere Loesung??
Danke.Gruesse,
Leela
-
Hallo,
hier mit allen drum und dran
LPITEMIDLIST pidl; BROWSEINFO bi = { 0 }; bi.ulFlags=BIF_EDITBOX; bi.lpfn=&BrowseCallbackProc; bi.lpszTitle = _T("Bitte wählen Sie das gewünschte Verzeichnis :"); LPSHELLFOLDER pDesktopFolder; OLECHAR wcInitDir[MAX_PATH]; UpdateData(); // Ordner vorbelegen MultiByteToWideChar(CP_ACP, 0, m_iFld.GetBuffer(MAX_PATH), -1, wcInitDir, MAX_PATH); m_iFld.ReleaseBuffer(-1); if (SUCCEEDED(SHGetDesktopFolder( &pDesktopFolder ))) { pDesktopFolder->ParseDisplayName(NULL, NULL, wcInitDir, NULL, &pidl, NULL); bi.lParam = (long) pidl;//LONG_PTR } pidl=SHBrowseForFolder (&bi); if (pidl != 0) { TCHAR path[MAX_PATH]; if (SHGetPathFromIDList(pidl, path)) { m_iFld.Format("%s",path);// Phad setzen char inBuf[255]; Oeffnen(inBuf);// neu laden m_ausg=""; UpdateData(FALSE); } IMalloc * imalloc = 0; if (SUCCEEDED(SHGetMalloc(&imalloc))) { imalloc->Free (pidl); imalloc->Release(); } }
MFG TaccoGo
-
Hallo Leute!
Ich bin auch auf der Suche nach einer Möglichkeit nur ein Verzeichnis ohne Dateinamen abzufragen, und bin dann über diesen Beitrag gestolpert.
Habs probiert, aber 9 Fehlermeldungen erhalten:C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(60) : error C2065: 'BrowseCallbackProc' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(60) : error C2440: '=' : 'int *' kann nicht in 'int (__stdcall *)(struct HWND__ *,unsigned int,long,long)' konvertiert werden
Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(66) : error C2065: 'm_iFld' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(66) : error C2228: Der linke Teil von '.GetBuffer' muss eine Klasse/Struktur/Union sein
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(67) : error C2228: Der linke Teil von '.ReleaseBuffer' muss eine Klasse/Struktur/Union sein
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(79) : error C2228: Der linke Teil von '.Format' muss eine Klasse/Struktur/Union sein
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(81) : error C2065: 'Oeffnen' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(82) : error C2065: 'm_ausg' : nichtdeklarierter Bezeichner
C:\Programme\Microsoft Visual Studio\MyProjects\Mp3_Lister\Einstellungen.cpp(82) : error C2440: '=' : 'char [1]' kann nicht in 'int' konvertiert werden
Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Fehler beim Ausführen von cl.exe.
Browse-Informationsdatei wird erstellt...Kann es sein, dass ich eine #include Anweisung übersehen habe, oder was muss ich machen, damit das funktioniert??
-
Hmm, die meisten Fehler sind doch 'Nicht deklarierte Bezeichner' !
Aber ein Header-File muss man nicht einbinden !Versuch mal diesen Code :
BROWSEINFO bi = { 0 }; bi.lpszTitle = _T("Wählen Sie bitte das gewünschte Verzeichnis aus :"); LPITEMIDLIST pidl = SHBrowseForFolder (&bi); if (pidl != 0) { TCHAR path[MAX_PATH]; if (SHGetPathFromIDList(pidl, path)) { AfxMessageBox(path); } IMalloc * imalloc = 0; if (SUCCEEDED(SHGetMalloc(&imalloc))) { imalloc->Free (pidl); imalloc->Release(); } }
Der hat bis jetzt immer funktioniert !
Gruß
:: NoName ::
-
Danke des geht! keine Ahnung warum aber es geht..
recht schen dank!!
-
In der FAQ gibts auch ne Klasse dafür...