CFileDialog - Mehrfach selektion
-
Hallo
Ich habe ein Problem bei meinem CFileDialog: Sobald ich mehr als 6 Dateien selektiere, funktioniert überhaupt nichts. Sonst läufts. Wo könnte das Problem sein?
Hier der Code:
CFileDialog* FD = new CFileDialog(true, NULL, NULL, OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, cs, NULL,0);
if (FD->DoModal() == IDOK) {
POSITION p = FD->GetStartPosition();
CString FN;
while (p != NULL)
{
FN = FD->GetNextPathName(p); //Name ausgeben
AddFile(FN.GetBuffer(255));
}
}delete FD;
Vielen Dank!
-
Was soll denn das mit dem GetBuffer(..)? Wo bleibt das ReleaseBuffer(..)? Lass das GetBuffer(..) mal weg, vielleicht klappt's dann ...
-
Nein, nein, das ist schon gut so. Ich habe noch etwas total programmspezifischen Code rausgeworfen (will euch ja nicht langweilen), und das ist noch übrig geblieben.
Sind mehr als 6 Files gewählt, ist if (FD->DoModal() == IDOK) nicht wahr und es bricht von vornherein ab. Es passiert also überhaupt nichts, so als ob ich Cancel geklickt hätte.
-
Irgendwann im Forum wurde zu diesem Thema/ Problem schon mal etwas diskutiert, musst Du mal schauen, mehr kann ich dazu auch nicht sagen.
-
Muss einfach nur m_ofn.lpstrFile und m_ofn.nMaxFile überschrieben werden mit einem grösseren Buffer, da CFileDialog nur _MAX_PATH Zeichen innerhalb des Strings unterstützt.
while (p != NULL) { FN = FD->GetNextPathName(p); //Name ausgeben AddFile(FN.GetBuffer(255)); }
P.S. das ist wirklich unschöner Code!
-
Sorry, ich raffs noch nicht ganz. Wo muss ich diese beiden Werte überschreiben? Vor dem DoModal oder danach? Mache ich es vorher bekomme ich bei ASSERT(nOffset <= m_ofn.nMaxFile) Probleme, und sonst tut sich gar nichts.
Kannst du mir noch etwas mehr sagen?
Vielen Dank!
-
Naja, zum Beispiel so:
TCHAR newString[20480]; newString[0] = 0; CFileDialog dlg; dlg.m_ofn.lpstrFile = newString; dlg.m_ofn.nMaxFile = 20480; dlg.DoMoal();
-
Hey spitze, es klappt!
Vielen Dank!