Question

Question:

Quelqu'un sait-il comment changer le répertoire actuel d'une boîte de dialogue de fichier déjà ouverte en cours d'exécution?

Détails:

J'ai une boîte de dialogue de fichier ouvert personnalisée (utilisant un modèle personnalisé pour ajouter des contrôles supplémentaires) qui a également désactivé toutes les validations, les contrôles existants et les tests de création (via les indicateurs OpenFileName).

La désactivation de ces éléments désactive le comportement intégré de la boîte de dialogue, qui modifiera le dossier actuellement affiché si l'utilisateur saisit un nom de dossier dans le " nom du fichier " liste déroulante et appuyez sur la touche Entrée.

J'aimerais rajouter ce comportement. Je peux détecter le moment où cela se produit via la procédure de raccordement. J'ai caché le bouton OK, désactivé l'accélérateur et mis mon propre "sélection". bouton sur le contrôle. Cela signifie que la seule fois où je reçois un message CDN_FILEOK, c’est lorsque l’utilisateur clique, entrer dans la zone de texte après avoir tapé.

Cependant, je ne vois pas comment indiquer par programme à la boîte de dialogue de modifier le répertoire en cours.

Je pensais pouvoir y parvenir en envoyant une sorte de message au contrôle SHELLDLL_DefView dans la fenêtre, mais je n’ai trouvé aucune documentation à ce sujet.

Était-ce utile?

La solution 2

J'ai pu trouver un moyen de contourner le problème.

Il s'avère que lorsque la validation est désactivée, vous devez saisir un nom de répertoire qui se termine par un " \ " modifiera toujours le dossier en cours d’affichage, mais en tapant un nom de répertoire qui ne se termine pas par un " \ " ne sera pas.

En utilisant spy ++, j’ai pu constater que lorsqu’on appuyait sur Entrée, un message WM_COMMAND était envoyé au contrôle de dialogue commun avec un argument wParam dont le mot d’ordre était BN_CLICKED et dont le mot de poids faible était ID_OK.

Si je sous-classe la boîte de dialogue commune, je peux intercepter le message, modifier le texte de la liste déroulante des noms de fichiers, transférer le message dans la procédure de sous-classe d'origine, puis modifier le texte ultérieurement.

C'est un peu de bidouillage, mais cela me permet d'obtenir le comportement que je souhaite dans le dialogue.

Autres conseils

Je ne suis pas sûr de la réponse directe, mais si vous avez SPY ++ ou tout autre programme de surveillance de messages, essayez de vérifier les messages qui passent lorsque vous modifiez le répertoire normal d'une boîte de dialogue OpenFileName. Vous pouvez y découvrir la réponse (bien que ce soit la solution la plus difficile).

Quelqu'un d’autre connaît peut-être la réponse rapidement; espérons qu'ils le fassent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top