Frage

Man kann den Text des ausgewählten Elements in der Listenansicht eines gemeinsamen Dialogs bekommen. Aber man kann nicht seine PIDL bekommen, und wenn der Benutzer zu verbergen bekannten Erweiterungen (Standardeinstellung) gewählt hat, dann kann man nicht wirklich sagen, was Datei ohne entweder seine Erweiterung ausgewählt wurde oder seine PIDL.

So mögliche Wege zur Lösung dieses könnte sein:

  1. Erhalten Sie IShellView von der Standard Datei-Dialog. Das darunter liegende IShellView kann sagen, was die PIDL ist für den aktuellen Auswahl. Also, wenn ich könnte einfach erhalten ahold der IShellView würde ich sein golden. Leider sehen, ich nicht CDM_xxx, die es tun würde. Und ich die Spitze von meinem Kopf kann nicht denken aus von allem, was es könnte erreichen !!! :(
  2. Einige andere Idee?!

Wir verwenden auf der Tatsache stützen, dass die Windows 9x, 2000 und XP-Version der allgemeinen Dialogdatei jeden Einzelteil PIDL in den LVITEM Daten (original Kredit Paul DiLascia) gespeichert:

LPCITEMIDLIST pidlItem = (LPCITEMIDLIST) pListCtrl-> GetItemData (nItem);

Doch beginnend mit Vista gemeinsamen Kontrollen und darüber, dass die Technik versagt: (

Alle Gedanken?

EDIT: Ich muß in der Lage sein, diese Informationen zu erhalten, nicht nur für das aktuell ausgewählte Element in der Listenansicht, aber für alle Elemente in der Listenansicht

.

EDIT2: Der Grund, warum ich brauche so tief zu graben:

In früheren Versionen unserer App bieten wir die Möglichkeit, zu: (1) Drücken Sie eine benutzerdefinierte Schaltfläche „Vorschau“, das schließt den Dialog, sondern überträgt die App die Liste der Elemente zur Zeit in der Ansicht angezeigt, in ihrer sichtbaren Ordnung, zusammen mit dem Index des einer zur Zeit markiert. Diese Liste muss vollständig angegeben werden - sehen 3 Dateien, die alle „J1329192“ sind (wenn es wirklich drei Dateien „J1329192.xyz“ „J1329192.xzy“ und „J1329192.zyx“ [in dieser Reihenfolge) sind nicht sinnvoll.

Benutzer dürfen die Namen teilweise Filter in den „Dateinamen:“ eingeben Feld, und der gemeinsame Dialog zeigt, wird nur Dateien, die den angegebenen Teilfilter entsprechen, in der Sortierreihenfolge, die der Benutzer ausgewählt hat. So berichtet zurück in der App genau das, was der Benutzer zur Vorschau wollte es erforderlich, dass wir zu Abfrage der Lage sein, die Informationen aus der Listenansicht (oder den gemeinsamen Dialog selbst).

Wir haben andere Erweiterungen den Dateidialog als auch - mit einem in-Place-Vorschaufenster, das zeigt den aktuelle Auswahl des Benutzers als Miniaturansicht sowie einen benutzerdefinierten haben kürzlich Plätze Schnittstelle usw. All dies möglich war ( mit viel Arbeit) vor Vista. Post Vista, ich habe in der Wand auf Wand laufen. Zur Zeit ist, verwenden wir ein Standard-Dateidialog mit nur sehr wenigen Eigenschaften unserer eigenen, die sich nicht gut mit den Kunden (was Feature X passiert?!)

Es gibt noch weitere Verbesserungen, aber das ist eine gute grobe Übersicht. Und sie alle einkochen zu erfordern das Wissen von „wirklich, ehrlich, welche Datei speziell im Blick auf Index X?“ Und aus unbekannten Gründen - Microsoft scheint nicht die Notwendigkeit zu fühlen, eine solche Schnittstelle. In der Tat haben sie nie. Nur durch einige Hacker und Reverse Engineering waren wir, um herauszufinden, wie die Dinge können unter der Haube gearbeitet und die benötigten Informationen zu erhalten. Und ja, das ist nicht unterstützt, und ja, MS brach unweigerlich unseren Code. Ich beschuldige sie nicht wirklich für das - was ich abscheulich finde ist, dass ihr neuerer, spiffier Schnittstelle weit mehr als ihre älteren geschlossen ist - und sie nicht mehr up-front-Schnittstellen zu bieten haben - unterstützten Schnittstellen - für diese Dialog Erweiterungen tun . Es ist wie sie ein großes paar Schritte rückwärts nahm -. Und keine nach vorne (im Namen des Fortschritts)

War es hilfreich?

Lösung

WM_USER + 7 den Browser zu bekommen, und dann seine aktive Shell Ansicht der IShellView Schnittstelle erhalten.

Sie kennen die übliche Folge der Verwendung von nicht dokumentiert Verhalten nicht wahr?

Andere Tipps

Ah, fand ich es. Sie werden verwenden möchten IFileOpenDialog für Vista, die explicilty alle diese Operationen unterstützen, sollten Sie genannt haben.

Ich weiß, das ist ein alter Thread aber in Vista +, die im alten Stil Dialoge werden weiterhin unterstützt. Sie können Vista-Stil deaktivieren und alle Steuerelemente Ihre benutzerdefinierten behalten wie zuvor. Das ist, was wir tun: wir ein eigenes Vorschaufenster in einer Vorlage in CFileDialog verhakt haben, die in IFileDialog zu reproduzieren als unmöglich erscheint.

Ich glaube, Sie brauchen FALSCH in einem BOOL-Parameter im Konstruktor übergeben Sie die Vista-Stil Dialoge auszuschalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top