2009-01-22 13 views
1

Question:GetOpenFileName Modifier le répertoire

Est-ce que quelqu'un sait comment changer le répertoire en cours d'un dialogue de fichier ouvert déjà en cours d'exécution?

Détails:

J'ai une boîte de dialogue de fichier ouvert personnalisé (à l'aide d'un modèle personnalisé pour ajouter des contrôles supplémentaires) qui a également toute la validation, les contrôles existants, et les tests de création rebutés (via les drapeaux OPENFILENAME) . La désactivation de ces éléments désactive le comportement intégré de la boîte de dialogue qui va modifier le dossier actuellement affiché si l'utilisateur tape un nom de dossier dans la zone de liste déroulante "nom de fichier" et appuie sur la touche Entrée.

Je voudrais rajouter ce comportement. Je peux détecter quand cela se produit via la procédure de crochet. J'ai caché le bouton OK, éteint son accélérateur, et mis mon propre bouton "select" sur le contrôle. Cela signifie que la seule fois où je reçois un message CDN_FILEOK est lorsque l'utilisateur frappe dans la zone de texte après avoir tapé.

Cependant, je n'arrive pas à comprendre comment programmer la boîte de dialogue pour changer le répertoire courant.

Je pensais que je pourrais être capable d'accomplir ceci en envoyant une sorte de message au contrôle SHELLDLL_DefView dans la fenêtre, mais je n'ai pas pu trouver de documentation dessus.

Répondre

0

J'ai été capable de trouver un travail. Il s'avère que lorsque la validation est désactivée, en tapant un nom de répertoire qui se termine par un "\" changera toujours le dossier affiché, mais en tapant un nom de répertoire qui ne se termine pas par un "\" ne pas. En utilisant spy ++, j'ai pu voir que lorsque enter est frappé un message WM_COMMAND sera envoyé au contrôle de dialogue commun avec un argument wParam dont le mot de poids fort est BN_CLICKED et dont le mot de poids faible est ID_OK. Si je sous-classe la boîte de dialogue commune, je peux intercepter le message, modifier le texte dans la zone de liste déroulante du nom de fichier, transférer le message à la procédure de sous-classe d'origine, puis modifier le texte par la suite.

C'est un peu un hack, mais cela me permet d'obtenir le comportement que je veux dans la boîte de dialogue.

1

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 se passent lorsque vous modifiez le répertoire d'une boîte de dialogue OpenFileName normale. Vous pourriez découvrir la réponse là (bien que ce soit la sortie difficile).

Quelqu'un d'autre pourrait connaître la réponse en main; Espérons qu'ils le fassent.