Domanda

Domanda:

Qualcuno sa come cambiare la directory corrente di una finestra di dialogo di file aperto già in esecuzione?

Dettagli:

Ho una finestra di dialogo file aperto personalizzata (usando un modello personalizzato per aggiungere controlli extra) che ha anche tutti i test di validazione, controlli esistenti e creazione disattivati ??(tramite i flag OpenFileName).

La disattivazione di queste cose disabilita il comportamento integrato della finestra di dialogo che lo farà cambiare la cartella attualmente visualizzata se l'utente digita un nome di cartella nel "nome file" " casella combinata e preme il tasto Invio.

Vorrei aggiungere di nuovo quel comportamento. Posso rilevare quando ciò accade tramite la procedura hook. Ho nascosto il pulsante OK, ho spento l'acceleratore e ho inserito il mio " seleziona " pulsante sul controllo. Ciò significa che l'unica volta che ricevo un messaggio CDN_FILEOK è quando l'utente preme entra nella casella di testo dopo aver digitato.

Non riesco, tuttavia, a capire come dire programmaticamente alla finestra di dialogo di cambiare la directory corrente.

Stavo pensando che avrei potuto ottenere questo risultato inviando una sorta di messaggio al controllo SHELLDLL_DefView nella finestra, ma non sono riuscito a trovare alcuna documentazione su di esso.

È stato utile?

Soluzione 2

Sono stato in grado di capire un lavoro in giro.

Si scopre che quando la convalida è disattivata, digitando un nome di directory che termina con un " \ " cambierà comunque la cartella visualizzata, ma digitando un nome di directory che non termina in un " \ " non lo farà.

Usando spy ++ sono stato in grado di vedere che quando si preme enter un messaggio WM_COMMAND verrà inviato al controllo della finestra di dialogo comune con un argomento wParam la cui parola di ordine superiore è BN_CLICKED e la cui parola di ordine inferiore è ID_OK.

Se eseguo la sottoclasse della finestra di dialogo comune, posso intercettare il messaggio, modificare il testo nella casella combinata del nome del file, inoltrare il messaggio alla procedura della sottoclasse originale, quindi modificare nuovamente il testo in seguito.

È un po 'di hack, ma mi permette di ottenere il comportamento che desidero dalla finestra di dialogo.

Altri suggerimenti

Non sono sicuro della risposta diretta, ma se hai SPY ++ o qualsiasi altro programma di snooping dei messaggi, prova a controllare i messaggi che passano quando cambi una normale directory di dialogo OpenFileName. Potresti scoprire la risposta lì (anche se è la via più difficile).

Qualcun altro potrebbe conoscere la risposta in modo manuale però; speriamo che lo facciano.

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