Partager via


Rechercher et remplacer des boîtes de dialogue

Affiche une boîte de dialogue sans mode qui permet à l’utilisateur de spécifier une chaîne à rechercher, ainsi que des options à utiliser lors de la recherche de texte dans un document. La boîte de dialogue Remplacer permet à l’utilisateur de spécifier une chaîne pour rechercher et remplacer une chaîne, ainsi que des options pour contrôler l’opération.

Vous créez et affichez une boîte de dialogue Rechercher en initialisant une structure FINDREPLACE et en transmettant la structure à la fonction FindText. L’illustration suivante montre une boîte de dialogue Rechercher classique.

boîte de dialogue rechercher

Vous créez et affichez une boîte de dialogue Remplacer en initialisant une structure FINDREPLACE et en passant la structure à la fonction replaceText. L’illustration suivante montre une boîte de dialogue Remplacer classique.

boîte de dialogue remplacer

Contrairement à d’autres boîtes de dialogue courantes, les boîtes de dialogue Rechercher et Remplacer boîtes de dialogue sont sans mode. Une boîte de dialogue sans mode permet à l’utilisateur de basculer entre la boîte de dialogue et la fenêtre qui l’a créée. Cela est utile pour permettre à l’utilisateur de rechercher une chaîne, de basculer vers la fenêtre d’application pour travailler sur la chaîne et de revenir à la boîte de dialogue pour rechercher une autre chaîne sans répéter la commande nécessaire pour ouvrir la boîte de dialogue.

Si la fonction FindText ou ReplaceText crée correctement la boîte de dialogue, elle retourne un handle dans la boîte de dialogue. Vous pouvez utiliser cette poignée pour déplacer et communiquer avec la boîte de dialogue. Si la fonction ne peut pas créer la boîte de dialogue, elle retourne NULL. Vous pouvez déterminer la cause d’une erreur en appelant la fonctionCommDlgExtendedErrorpour récupérer la valeur d’erreur étendue.

Cette section décrit les rubriques suivantes.

Message inscrit FINDMSGSTRING

Avant de créer une boîte de dialogue Rechercher ou Remplacer, vous devez appeler la fonction RegisterWindowMessage pour obtenir un identificateur de message pour le message FINDMSGSTRING message inscrit. Vous pouvez ensuite utiliser l’identificateur pour détecter et traiter les messages envoyés à partir de la boîte de dialogue. Lorsque l’utilisateur clique sur le bouton Recherchersuivant, Remplacerou bouton Remplacer tout dans une boîte de dialogue, la procédure de boîte de dialogue envoie un message FINDMSGSTRING à la procédure de fenêtre de la fenêtre propriétaire. Lorsque vous créez la boîte de dialogue, le membre hwndOwner de la structure FINDREPLACE identifie la fenêtre propriétaire.

Le paramètre lParam d’un messageFINDMSGSTRINGest un pointeur vers la structure FINDREPLACE que vous avez spécifiée lors de la création de la boîte de dialogue. Avant d’envoyer le message, la boîte de dialogue définit les membres de cette structure avec la dernière entrée utilisateur, y compris la chaîne à rechercher, la chaîne de remplacement (le cas échéant) et les options de l’opération de recherche et de remplacement.

Dans un messageFINDMSGSTRING, les indicateurs de membre de la structure FINDREPLACE incluent l’un des indicateurs suivants pour indiquer l’événement qui a provoqué le message.

Drapeau Signification
FR_DIALOGTERM La boîte de dialogue se ferme. Une fois que la fenêtre propriétaire traite ce message, une poignée de la boîte de dialogue n’est plus valide.
FR_FINDNEXT L’utilisateur a cliqué sur le bouton Rechercher suivant dans une boîte de dialogue Rechercher ou Remplacer. Le membre lpstrFindWhat spécifie la chaîne à rechercher.
FR_REPLACE L’utilisateur a cliqué sur le bouton Remplacer dans une boîte de dialogue Remplacer. Le membre lpstrFindWhat spécifie la chaîne à remplacer et le membre lpstrReplaceWith spécifie la chaîne de remplacement.
FR_REPLACEALL L’utilisateur a cliqué sur le bouton Remplacer tout dans une boîte de dialogue Remplacer. Le membre lpstrFindWhat spécifie la chaîne à remplacer et le membre lpstrReplaceWith spécifie la chaîne de remplacement.

 

Pour un message Rechercher ou Remplacer tout message, les indicateurs membre peuvent inclure n’importe quelle combinaison des indicateurs suivants pour indiquer les options de recherche.

Drapeau Signification
FR_DOWN Si cette option est définie, le bouton Vers le bas des cases d’option direction est sélectionné, indiquant que l’utilisateur souhaite effectuer une recherche de l’emplacement actuel jusqu’à la fin du document. Si FR_DOWN n’est pas défini, le bouton Haut est sélectionné afin que l’utilisateur souhaite effectuer une recherche au début du document.
FR_MATCHCASE Si la valeur est définie, la case de correspondance case est cochée, indiquant que l’utilisateur souhaite que la recherche respecte la casse. Si FR_MATCHCASE n’est pas défini, la case à cocher n’est pas cochée afin que la recherche ne respecte pas la casse.
FR_WHOLEWORD Si cette option est définie, la case à cocher Mettre en correspondance le mot entier uniquement est cochée, indiquant que l’utilisateur souhaite rechercher uniquement des mots entiers qui correspondent à la chaîne de recherche. Si FR_WHOLEWORD n’est pas défini, la case à cocher n’est pas sélectionnée. Vous devez donc également rechercher des fragments de mots qui correspondent à la chaîne de recherche.

 

Personnalisation de la boîte de dialogue Rechercher ou remplacer

Pour personnaliser une boîte de dialogue Rechercher ou Remplacer, vous pouvez utiliser l’une des méthodes suivantes :

  • Spécifier des valeurs dans la structureFINDREPLACElorsque vous créez la boîte de dialogue
  • Fournir un modèle personnalisé
  • Fournir une procédure de raccordement

Lorsque vous créez une boîte de dialogue Rechercher ou Remplacer, vous pouvez définir des indicateurs dans les indicateurs membre de la structure FINDREPLACE pour masquer ou désactiver l’un des contrôles d’option de recherche. Par exemple, vous pouvez définir l’indicateur de FR_NOMATCHCASE pour désactiver la case de correspondance case ou définir l’indicateur de FR_HIDEMATCHCASE pour le masquer.

Vous pouvez fournir un modèle personnalisé pour un Rechercher ou boîte de dialogue Remplacer, par exemple, si vous souhaitez inclure des contrôles supplémentaires uniques à votre application. Les fonctions FindText et ReplaceText utilisent votre modèle personnalisé à la place du modèle par défaut.

Pour fournir un modèle personnalisé pour une boîte de dialogue Rechercher ou remplacer

  1. Créez le modèle personnalisé en modifiant le modèle par défaut spécifié dans le fichier Findtext.dlg. Les identificateurs de contrôle utilisés dans le modèle de boîte de dialogue Rechercher ou Remplacer sont définis dans le fichier Dlgs.h.
  2. Utilisez la structureFINDREPLACE pour activer le modèle comme suit :
      • Si votre modèle personnalisé est une ressource dans une application ou une bibliothèque de liens dynamiques, définissez l’indicateur de FR_ENABLETEMPLATE dans les indicateurs membre. Utilisez le hInstance et lpTemplateName membres de la structure pour identifier le nom du module et de la ressource.

        -Ou-

      • Si votre modèle personnalisé est déjà en mémoire, définissez l’indicateur FR_ENABLETEMPLATEHANDLE. Utilisez le membre hInstance pour identifier l’objet mémoire qui contient le modèle.

Vous pouvez fournir une procédure de hookFRHookProcpour une boîte de dialogue Rechercher ou remplacer . La procédure de raccordement peut traiter les messages envoyés à la boîte de dialogue. Si vous utilisez un modèle personnalisé pour définir des contrôles supplémentaires, vous devez fournir une procédure de hook pour traiter les entrées de vos contrôles.

Pour activer une procédure de raccordement pour une boîte de dialogue Rechercher ou remplacer

  1. Définissez l’indicateur FR_ENABLEHOOK dans le membre indicateurs de de la structure FINDREPLACE.
  2. Spécifiez l’adresse de la procédure de hook dans le membre lpfnHook.

Après avoir traité son message WM_INITDIALOG, la procédure de boîte de dialogue envoie un message WM_INITDIALOG à la procédure de raccordement. Le paramètre lParam de ce message est un pointeur vers la structure FINDREPLACE utilisée pour initialiser la boîte de dialogue.

Si la procédure de raccordement retourne FAUX en réponse au message WM_INITDIALOG, la boîte de dialogue ne s’affiche pas, sauf si la procédure de hook l’affiche. Pour ce faire, effectuez d’abord d’autres opérations de peinture, puis appelez les fonctionsShowWindowet UpdateWindow. Le code suivant fournit un exemple :

// We've returned FALSE in response to WM_INITDIALOG. 
// We've performed any other paint operations. 
// Now we display the dialog box. 
ShowWindow(hDlg, SW_SHOWNORMAL); 
UpdateWindow(hDlg);