Domanda

Si può ottenere il testo della voce selezionata nella lista-vista di un dialogo comune. Ma non si può ottenere il suo PIDL, e se l'utente ha scelto di nascondere le estensioni dei noti (impostazione predefinita), quindi non si può davvero dire quale file è stato selezionato senza né la sua estensione o la sua PIDL.

Quindi possibili modi per risolvere questo potrebbe essere:

  1. Ottenere un IShellView dal finestra di dialogo file standard aperto. Il IShellView sottostante può dire che cosa la PIDL è per la corrente selezione. Quindi, se ho potuto ottenere semplicemente Ahold del IShellView, sarei d'oro. Purtroppo, io non vedo CDM_xxx che avrebbe fatto. E io non si può pensare fuori della parte superiore della mia testa di tutto ciò che potrebbe realizzarlo !!! :(
  2. Qualche altra idea?!

Abbiamo usato a fare affidamento sul fatto che il Windows 9x, 2000, XP e la versione della finestra di dialogo file comune memorizzato PIDL di ciascun elemento nei dati LVITEM (credito originale di Paul Dilascia):

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

Tuttavia, a partire con i controlli comuni di Vista e di cui sopra, che la tecnica non riesce: (

Qualche idea?

EDIT: ho bisogno di essere in grado di ottenere tali informazioni non solo per l'elemento selezionato nella visualizzazione elenco, ma per tutti gli elementi nella vista list

.

EDIT2: La ragione per cui ho bisogno di scavare così in profondità:

Nelle versioni precedenti di nostra app forniamo la possibilità di: (1) Premere un pulsante di "Anteprima" che chiude la finestra di dialogo, ma i trasferimenti per l'applicazione l'elenco degli elementi attualmente visualizzata nella vista, nel loro ordine visibile, insieme con l'indice di quello attualmente evidenziato. Questa lista deve essere completamente specificato -. Visto 3 file che sono tutti "J1329192" (quando ci sono in realtà 3 file "J1329192.xyz" "J1329192.xzy" e "J1329192.zyx" [in questo ordine) non è utile

Gli utenti possono digitare un filtro di nome di file parziale nella "nome del file:" il campo, e la finestra di dialogo comune mostrerà solo i file che corrispondono al determinato filtro parziali, in una sorta di ordine che l'utente ha scelto. Quindi, per riferire al app esattamente ciò che l'utente ha voluto anteprima richiede che siamo in grado di interrogare le informazioni dal controllo visualizzazione elenco (o la finestra di dialogo comune stesso).

fare altri miglioramenti per il file di dialogo, come pure - tra cui un riquadro di anteprima sul posto che mostra la selezione corrente dell'utente come miniatura, così come hanno un'interfaccia personalizzata recenti-luoghi, ecc Tutto questo è stato possibile ( con un sacco di lavoro) precedenti a Vista. Messaggio Vista, ho incontrato a muro su muro. Per il momento, si usa una finestra di dialogo di file standard con solo poche caratteristiche del nostro, che non sta bene con i clienti (cosa è successo per caratterizzare X?!)

Ci sono altri miglioramenti, ma questo è un buon quadro di massima. E tutte si riducono a richiedere la conoscenza di "veramente, onestamente, quale file specifico è nella visualizzazione di indice X?" E per motivi sconosciuti - Microsoft non sembra sentire il bisogno di fornire questo tipo di interfaccia. In realtà non hanno mai fatto. Solo attraverso alcuni hacking e reverse engineering siamo stati in grado di capire come funzionavano le cose sotto il cofano e ottenere le informazioni necessarie. E sì, questo è supportato, e sì, MS inevitabilmente rotto il nostro codice. Io in realtà non li biasimo per questo - ciò che io trovo odioso è che la loro interfaccia più recente, spiffier è molto più chiuso rispetto ai loro più grandi - e che non forniscono più interfacce di up-front - interfacce supportate - per fare questi miglioramenti di dialogo . E 'come hanno preso un grosso paio di passi indietro -. E nessuno in avanti (in nome del progresso)

È stato utile?

Soluzione

WM_USER + 7 per ottenere il browser, e quindi ottenere la sua interfaccia di visualizzazione della shell IShellView attiva.

Non si sa il solito conseguenza dell'utilizzo di non documentata proprio comportamento?

Altri suggerimenti

Ah, l'ho trovato. Ti consigliamo di utilizzare IFileOpenDialog per Vista, che dovrebbe explicilty sostegno tutte quelle operazioni che hai citato.

So che questo è un vecchio thread, ma, in Vista +, le finestre di dialogo vecchio stile sono ancora supportati. È possibile disattivare Vista-style e conservare tutti i vostri controlli personalizzati come prima. Questo è ciò che facciamo: abbiamo una finestra di anteprima personalizzato in un modello agganciato in CFileDialog, che sembra essere impossibile da riprodurre in IFileDialog.

Credo che è necessario passare FALSE in un parametro BOOL nel costruttore di spegnere le finestre di dialogo in stile Vista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top