Fonction de rappel LPOFNHOOKPROC (commdlg.h)

[À compter de Windows Vista, les boîtes de dialogue Ouvrir et Enregistrer en tant que communes ont été remplacées par la boîte de dialogue Élément commun. Nous vous recommandons d’utiliser l’API Common Item Dialog au lieu de ces boîtes de dialogue à partir de la bibliothèque de boîtes de dialogue commune.]

Reçoit les messages de notification envoyés à partir de la boîte de dialogue. La fonction reçoit également des messages pour tous les contrôles supplémentaires que vous avez définis en spécifiant un modèle de boîte de dialogue enfant. La procédure de hook OFNHookProc est une fonction de rappel définie par l’application ou définie par la bibliothèque qui est utilisée avec les boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer.

Le type LPOFNHOOKPROC définit un pointeur vers cette fonction de rappel. OFNHookProc est un espace réservé pour le nom de fonction défini par l’application.

Syntaxe

LPOFNHOOKPROC Lpofnhookproc;

UINT_PTR Lpofnhookproc(
  HWND unnamedParam1,
  UINT unnamedParam2,
  WPARAM unnamedParam3,
  LPARAM unnamedParam4
)
{...}

Paramètres

unnamedParam1

Handle de la boîte de dialogue enfant de la boîte de dialogue Ouvrir ou Enregistrer sous . Utilisez la fonction GetParent pour obtenir le handle de la boîte de dialogue Ouvrir ou Enregistrer sous .

unnamedParam2

Identificateur du message reçu.

unnamedParam3

Informations supplémentaires sur le message. La signification exacte dépend de la valeur du paramètre unnamedParam2 .

unnamedParam4

Informations supplémentaires sur le message. La signification exacte dépend de la valeur du paramètre unnamedParam2 . Si le paramètre unnamedParam2 indique le WM_INITDIALOG message, unnamedParam4 est un pointeur vers une structure OPENFILENAME contenant les valeurs spécifiées lors de la création de la boîte de dialogue.

Valeur retournée

Si la procédure de hook retourne zéro, la procédure de boîte de dialogue par défaut traite le message.

Si la procédure de hook retourne une valeur différente de zéro, la procédure de boîte de dialogue par défaut ignore le message.

Pour les messages de notification CDN_SHAREVIOLATION et CDN_FILEOK , la procédure de hook doit retourner une valeur différente de zéro pour indiquer qu’elle a utilisé la fonction SetWindowLong pour définir une valeur de DWL_MSGRESULT différente de zéro.

Remarques

Si vous ne spécifiez pas l’indicateur OFN_EXPLORER lorsque vous créez une boîte de dialogue Ouvrir ou Enregistrer sous et que vous souhaitez une procédure de crochet, vous devez utiliser une procédure de crochet OFNHookProcOldStyle de style ancien. Dans ce cas, la boîte de dialogue aura l’ancienne interface utilisateur.

Lorsque vous utilisez les fonctions GetOpenFileName ou GetSaveFileName pour créer une boîte de dialogue Ouvrir ou Enregistrer sous de style Explorer, vous pouvez fournir une procédure de crochet OFNHookProc. Pour activer la procédure de hook, utilisez la structure OPENFILENAME que vous avez passée à la fonction de création de dialogue. Spécifiez le pointeur vers la procédure de crochet dans le membre lpfnHook et spécifiez l’indicateur OFN_ENABLEHOOK dans le membre Flags .

Si vous fournissez une procédure de hook pour une boîte de dialogue commune de style Explorer, le système crée une boîte de dialogue enfant de la boîte de dialogue par défaut. La procédure de hook fait office de procédure de dialogue pour le dialogue enfant. Ce dialogue enfant est basé sur le modèle que vous avez spécifié dans la structure OPENFILENAME , ou il s’agit d’une boîte de dialogue enfant par défaut si aucun modèle n’est spécifié. La boîte de dialogue enfant est créée lorsque la procédure de dialogue par défaut traite son WM_INITDIALOG message. Une fois que la boîte de dialogue enfant traite son propre message WM_INITDIALOG , la procédure de dialogue par défaut déplace les contrôles standard, si nécessaire, pour faire de la place pour tous les contrôles supplémentaires de la boîte de dialogue enfant. Le système envoie ensuite le message de notification CDN_INITDONE à la procédure de hook.

La procédure de hook ne reçoit pas de messages destinés aux contrôles standard de la boîte de dialogue par défaut. Vous pouvez sous-classer les contrôles standard, mais cela est déconseillé, car cela peut rendre votre application incompatible avec les versions ultérieures. Toutefois, les boîtes de dialogue courantes de style Explorer fournissent un ensemble de messages que la procédure de hook peut utiliser pour surveiller et contrôler la boîte de dialogue. Il s’agit notamment d’un ensemble de messages de notification envoyés à partir de la boîte de dialogue, ainsi que des messages que vous pouvez envoyer pour récupérer des informations à partir de la boîte de dialogue. Pour obtenir la liste complète de ces messages, consultez Procédures de crochet de style Explorer.

Si la procédure de crochet traite le message WM_CTLCOLORDLG , elle doit retourner une poignée de pinceau valide pour peindre l’arrière-plan de la boîte de dialogue. En général, s’il traite un message WM_CTLCOLOR* , il doit retourner une poignée de pinceau valide pour peindre l’arrière-plan du contrôle spécifié.

N’appelez pas la fonction EndDialog à partir de la procédure de hook. Au lieu de cela, la procédure de crochet peut appeler la fonction PostMessage pour publier un message WM_COMMAND avec la valeur IDCANCEL dans la procédure de boîte de dialogue. La publication d’IDCANCEL ferme la boîte de dialogue et entraîne le retour de la fonction de boîte de dialogue FALSE. Si vous avez besoin de savoir pourquoi la procédure de hook a fermé la boîte de dialogue, vous devez fournir votre propre mécanisme de communication entre la procédure de hook et votre application.

Configuration requise

   
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête commdlg.h (inclure Windows.h)

Voir aussi

Bibliothèque de boîtes de dialogue commune

Conceptuel

GetOpenFileName

GetSaveFileName

OFNHookProcOldStyle

OPENFILENAME

Référence