Condividi tramite


Trova e sostituisci finestre di dialogo

Visualizza una finestra di dialogo senza modalità che consente all'utente di specificare una stringa da cercare, nonché le opzioni da utilizzare durante la ricerca di testo in un documento. La finestra di dialogo Sostituisci consente all'utente di specificare una stringa da cercare e una stringa di sostituzione, nonché di opzioni per controllare l'operazione.

Per creare e visualizzare una finestra di dialogo Trova , inizializzare una struttura FINDREPLACE e passare la struttura alla funzione FindText . La figura seguente mostra una tipica finestra di dialogo Trova .

finestra di dialogo trova

Per creare e visualizzare una finestra di dialogo Sostituisci , inizializzare una struttura FINDREPLACE e passare la struttura alla funzione ReplaceText . La figura seguente mostra una tipica finestra di dialogo Sostituisci .

finestra di dialogo sostituisci

A differenza di altre finestre di dialogo comuni, le finestre di dialogo Trova e sostituisci sono senza modalità. Una finestra di dialogo senza modalità consente all'utente di passare dalla finestra di dialogo alla finestra che l'ha creata. Ciò è utile per consentire all'utente di cercare una stringa, passare alla finestra dell'applicazione per lavorare sulla stringa e tornare alla finestra di dialogo per cercare un'altra stringa senza ripetere il comando necessario per aprire la finestra di dialogo.

Se la funzione FindText o ReplaceText crea correttamente la finestra di dialogo, restituisce un handle alla finestra di dialogo. È possibile usare questo handle per spostare e comunicare con la finestra di dialogo. Se la funzione non riesce a creare la finestra di dialogo, restituisce NULL. È possibile determinare la causa di un errore chiamando la funzione CommDlgExtendedError per recuperare il valore di errore esteso.

In questa sezione vengono illustrati gli argomenti seguenti.

Messaggio registrato FINDMSGSTRING

Prima di creare una finestra di dialogo Trova o Sostituisci , è necessario chiamare la funzione RegisterWindowMessage per ottenere un identificatore di messaggio per il messaggio registrato FINDMSGSTRING . È quindi possibile usare l'identificatore per rilevare ed elaborare i messaggi inviati dalla finestra di dialogo. Quando l'utente fa clic sul pulsante Trova successivo, Sostituisci o Sostituisci tutto in una finestra di dialogo, la procedura della finestra di dialogo invia un messaggio FINDMSGSTRING alla procedura di finestra del proprietario. Quando si crea la finestra di dialogo, il membro hwndOwner della struttura FINDREPLACE identifica la finestra del proprietario.

Il parametro lParam di un messaggio FINDMSGSTRING è un puntatore alla struttura FINDREPLACE specificata al momento della creazione della finestra di dialogo. Prima di inviare il messaggio, la finestra di dialogo imposta i membri di questa struttura con l'input dell'utente più recente, inclusa la stringa da cercare, la stringa di sostituzione (se presente) e le opzioni per l'operazione di ricerca e sostituzione.

In un messaggio FINDMSGSTRING il membro Flags della struttura FINDREPLACE include uno dei flag seguenti per indicare l'evento che ha causato il messaggio.

Flag Significato
FR_DIALOGTERM La finestra di dialogo viene chiusa. Dopo che la finestra del proprietario ha elaborato questo messaggio, un handle per la finestra di dialogo non è più valido.
FR_FINDNEXT L'utente ha fatto clic sul pulsante Trova successivo in una finestra di dialogo Trova o Sostituisci . Il membro lpstrFindWhat specifica la stringa da cercare.
FR_REPLACE L'utente ha fatto clic sul pulsante Sostituisci in una finestra di dialogo Sostituisci . Il membro lpstrFindWhat specifica la stringa da sostituire e il membro lpstrReplaceWith specifica la stringa di sostituzione.
FR_REPLACEALL L'utente ha fatto clic sul pulsante Sostituisci tutto in una finestra di dialogo Sostituisci . Il membro lpstrFindWhat specifica la stringa da sostituire e il membro lpstrReplaceWith specifica la stringa di sostituzione.

 

Per un messaggio Trova successivo o Sostituisci tutto , il membro Flags può includere qualsiasi combinazione dei flag seguenti per indicare le opzioni di ricerca.

Flag Significato
FR_DOWN Se impostato, viene selezionato il pulsante Giù dei pulsanti di opzione direzione, a indicare che l'utente desidera eseguire la ricerca dalla posizione corrente alla fine del documento. Se FR_DOWN non è impostato, il pulsante Su viene selezionato in modo che l'utente voglia cercare all'inizio del documento.
FR_MATCHCASE Se impostata, viene selezionata la casella di controllo Maiuscole/minuscole , a indicare che l'utente desidera che la ricerca venga fatta distinzione tra maiuscole e minuscole. Se FR_MATCHCASE non è impostata, la casella di controllo non è selezionata in modo che la ricerca possa essere senza distinzione tra maiuscole e minuscole.
FR_WHOLEWORD Se impostata, viene selezionata la casella di controllo Match Whole Word Only ,che indica che l'utente vuole cercare solo parole intere che corrispondono alla stringa di ricerca. Se FR_WHOLEWORD non è impostato, la casella di controllo è deselezionata, quindi è consigliabile cercare anche frammenti di parola che corrispondono alla stringa di ricerca.

 

Personalizzazione della finestra di dialogo Trova o Sostituisci

Per personalizzare una finestra di dialogo Trova o Sostituisci , è possibile utilizzare uno dei metodi seguenti:

  • Specificare i valori nella struttura FINDREPLACE quando si crea la finestra di dialogo
  • Specificare un modello personalizzato
  • Specificare una procedura hook

Quando si crea una finestra di dialogo Trova o Sostituisci , è possibile impostare i flag nel membro Flag della struttura FINDREPLACE per nascondere o disabilitare uno dei controlli delle opzioni di ricerca. Ad esempio, è possibile impostare il flag di FR_NOMATCHCASE per disabilitare la casella di controllo Maiuscole /minuscole o impostare il flag FR_HIDEMATCHCASE per nasconderlo.

È possibile specificare un modello personalizzato per una finestra di dialogo Trova o Sostituisci , ad esempio se si desidera includere controlli aggiuntivi univoci per l'applicazione. Le funzioni FindText e ReplaceText usano il modello personalizzato al posto del modello predefinito.

Per fornire un modello personalizzato per una finestra di dialogo Trova o Sostituisci

  1. Creare il modello personalizzato modificando il modello predefinito specificato nel file Findtext.dlg. Gli identificatori di controllo usati nel modello di finestra di dialogo Trova o Sostituisci predefiniti sono definiti nel file Dlgs.h.
  2. Usare la struttura FINDREPLACE per abilitare il modello come indicato di seguito:
      • Se il modello personalizzato è una risorsa in un'applicazione o in una libreria a collegamento dinamico, impostare il flag FR_ENABLETEMPLATE nel membro Flags . Usare i membri hInstance e lpTemplateName della struttura per identificare il modulo e il nome della risorsa.

        Oppure

      • Se il modello personalizzato è già in memoria, impostare il flag FR_ENABLETEMPLATEHANDLE. Utilizzare il membro hInstance per identificare l'oggetto memoria che contiene il modello.

È possibile fornire una procedura hook FRHookProc per una finestra di dialogo Trova o Sostituisci . La procedura hook può elaborare i messaggi inviati alla finestra di dialogo. Se si usa un modello personalizzato per definire controlli aggiuntivi, è necessario fornire una routine hook per elaborare l'input per i controlli.

Per abilitare una procedura hook per una finestra di dialogo Trova o Sostituisci

  1. Impostare il flag FR_ENABLEHOOK nel membro Flags della struttura FINDREPLACE .
  2. Specificare l'indirizzo della routine hook nel membro lpfnHook .

Dopo l'elaborazione del messaggio WM_INITDIALOG , la procedura della finestra di dialogo invia un messaggio WM_INITDIALOG alla routine hook. Il parametro lParam di questo messaggio è un puntatore alla struttura FINDREPLACE utilizzata per inizializzare la finestra di dialogo.

Se la routine hook restituisce FALSE in risposta al messaggio di WM_INITDIALOG , la finestra di dialogo non verrà visualizzata a meno che non venga visualizzata la procedura hook. A tale scopo, eseguire prima qualsiasi altra operazione di disegno e quindi chiamare le funzioni ShowWindow e UpdateWindow . Nel codice seguente ne viene illustrato un esempio:

// 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);