Datei-Liste wie in CFileDialog mit CListCtrl?

Abbreviation

Mitglied
Hallo,

ich versuche, in einer MFC-Anwendung eine Liste von Dateien zu erstellen, die zusätzlich zu Titel und Pfad noch ein paar andere Items enthält.

Wenn man auf eine Datei in dieser Liste doppelklickt, soll sich diese Datei (als Dokumentklasse der Anwendung) öffnen, so wie im CFileDialog.

Weiß jemand, wie die Liste im CFileDialog realisiert ist? Kann man das mit CListCtrl hinkriegen?

(Bin leider Total-Anfänger...:( )

Vielen lieben Dank für eure Mühe! :)

MfG
Marei
 
Also, wenn du Probleme mit dem Listview hast, kann ich dir sicher weiterhelfen, aber ich weiss nicht, ob ich dein Problem richtig verstanden habe.
Willst du wissen, wie du eine Mehrfachauswahl im FileDialog machen kannst oder geht es um das Einfügen in die Liste?
 
Hallo

natürlich kann man mit einem CListCtrl eine Dateiliste erstellen mit allen möglichen Informationen über die Dateien oder sonstige Informationen. Mit ExtractIconEx kann man sogar das Programmicon für Ausführbare Dateien (.exe) ermitteln, bzw. mit SHGetFileInfo für sonstige Dateien, zw. .doc, .zip, .ppt, usw.

Mit einem Doppelclick auf die Datei kann man die dazugehörende Anwendung mit der ausgewählten Datei starten und zwar folgendermassen:

Code:
CString text = "C:\\test.txt";
ShellExecute (NULL, "open", text, NULL,  NULL,  SW_SHOW);

Wenn Du alle Dateien eines Directorys auflisten willst, so kannst du die Klasse CFileFind verwenden. Hier kann man eine Wildcard eingeben, und die Klasse gibt Dir alle Dateien im Directory zurück. Mit dieser Klasse bekommst Du auch so ziemlich alle Dateiinformationen.
 
Dankeschön!
Die Antwort von cFuchs war schon ziemlich perfekt, vielen Dank.

Darauf hab ich auch gleich neue Fragen zum Thema:

- Wo ist der Unterschied oder die Beziehung zwischen einer CListBox und einem CListCtrl? Gibt es da eine Beziehung?

- Öffnet sich dann die Datei in einem Child Frame von meiner MFC-Anwendung? Kann man das auch "einfach" hinkriegen oder ist das eher kompliziert?

Vielen Dank für eure Geduld (und die netten Antworten bisher :) )

MfG
Marei
 
CListBox und CListCtrl sind zwei ziemlich verschieden Controls. Eine Ansicht (Report) des CListCtrl ähnelt der ListBox, aber damit hat es sich.

Die CListBox ist einfach eine Liste von Strings, während der CListCtrl auch mehrere Spalten haben kann oder auch andere Ansichten (Icons, Mini-Icons). Der CListCtrl wird auch für den Desktop bzw. für den Explorer rechts verwendet.

Zur zweiten Frage:

ShellExecute öffnet die Datei in dem dafür registrierten Programm. Um die Datei in einem View von deinem Programm zu öffnen, müsstest du das schon selbst machen (CWinApp::OpenDocumentFile).
 
Ah, okay, dankeschön!
Iregendwie werde ich aus der MSDN noch nicht immer so schlau, ich hoffe, das legt sich noch! Aber dank euch bin ich heute echt weiter gekommen!

Vielen lieben Dank :)
Marei
 
Hallo,

jetzt hab' ich leider ein neues Problem :-( :

Ich habe diese Tabelle nun mit CListCtrl schön aufgebaut, aber sie wird in meinem Dialog nicht angezeigt.
Ich "update" aus den Methoden immer nach der Tabelle noch mal mit CWnd::UpdateData, aber es ändert nichts.
Woran kann das denn noch liegen?

Danke sehr!
MfG
Marei
 
Zeig doch mal deinen Code?

Welche Ansicht des ListCtrl benutzt du? Wenn du LVS_REPORT (bzw. Report-Ansicht) benutzt, muss man vorher Spalten einfügen (InsertColumn), sonst sieht man gemeinerweise nichts.

Von UpdateData würde ich bei MFC eher die Finger lassen, das ist (leider) nicht ganz so komplett umgesetzt; teilweise tut es einfach nicht das, was man erwartet.
 
Hallo,

ich hab jetzt herausgefunden, warum (möglicherweise) das Ganze nicht funktioniert hat:
Zum einen hab ich mich umständlich damit abgeplagt ganz viele tolle LVCOLUMNS zu basteln. Die hatten aber alle keinen Titel und keine Breite, als ich das geändert hatte, hat man schon mal die Spalten gesehen, im Dialog.

Zum anderen hab ich mich ebenso umständlich damit abgeplagt, die Items zusammen zu bauen und dann ein komplettes Item zusammenzubauen. Dann habe ich das ganze Item und danach ebenso umständlich die Subitems eingefügt. Das geht ja wirklich viel einfacher, wenn man alle Eigenschaften direkt in den SetItem-Argumenten festlegt.
Das Problem war bei meinem vorherigen Code wohl ein Problem mit dem lpszText der Items, ich hab ihm da ein char[x] übergeben, als ich im direkt CStrings gegeben habe hat's getan...

Danke, danke, danke noch mal für eure Geduld und Tipps!

MfG
Marei
 

Neue Beiträge

Zurück