Suchen von Text

Dieses Thema beschreibt Beispielcode, der zeigt und verwaltet das Dialogfeld Suchen , so dass der Benutzer die Parameter einer Operation Suche angeben kann. Das Dialogfeld sendet Nachrichten an Ihren Fensterprozedur, so dass Sie den Suchvorgang durchführen können.

Der Code zum Anzeigen und Verwalten von einem Dialogfeld Ersetzen ist ähnlich, außer dass es die ReplaceText -Funktion verwendet, um das Dialogfeld anzuzeigen. Das Dialogfeld Ersetzen sendet Nachrichten auch als Reaktion auf Mausklicks auf die Schaltflächen Ersetzen und Alle ersetzen.

Verwenden Sie das Dialogfeld Suchen oder ersetzen möchten , müssen Sie drei separate Aufgaben ausführen.:

  1. Holen Sie sich eine Meldungs-ID für die registrierte Nachricht FINDMSGSTRING.
  2. Zeigt das Dialogfeld.
  3. Prozeßmeldungen FINDMSGSTRING wird das Dialogfeld Öffnen.

Wenn Sie die Anwendung initialisieren, rufen Sie die RegisterWindowMessage Funktion um eine Meldungs-ID für die registrierte Nachricht FINDMSGSTRING.

UINT uFindReplaceMsg;  / / message-ID für FINDMSGSTRING uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING) 

Um das Dialogfeld Suchen anzuzeigen, zuerst initialisieren Sie eine FINDREPLACE -Struktur zu, und rufen Sie anschließend die FindText -Funktion. Beachten Sie, dass die FINDREPLACE -Struktur und der Puffer für die Suchzeichenfolge eine globale oder statische Variable sein sollte, so dass es nicht außerhalb des Bereichs geht, bevor das Dialogfeld wird geschlossen. Müssen Sie das HwndOwner -Mitglied das Fenster angeben, das die registrierten Nachrichten empfängt. Nachdem Sie das Dialogfeld erstellen, können Sie verschieben oder bearbeiten sie mithilfe von das zurückgegebene handle.

FINDREPLACE-fr;       / / gemeinsame Dialogfeld Struktur
HWND Hwnd;            / / Besitzerfenster
CHAR SzFindWhat [80];  / / empfangende Zeichenfolge Puffer
HWND Hdlg = NULL;     / / handle des Dialogfelds Suchen

/ / Initialize FINDREPLACE
ZeroMemory (Amp; fr, sizeof(FINDREPLACE));
Fr.lStructSize = sizeof(FINDREPLACE);
Fr.hwndOwner = Hwnd;
Fr.lpstrFindWhat = SzFindWhat;
Fr.wFindWhatLen = 80;
Fr.Flags = 0;

hDlg = Suchtext (& fr) 

Wenn das Dialogfeld geöffnet ist, muss Ihre Hauptmeldungsschleife einen Aufruf der Funktion IsDialogMessage enthalten. Übergeben Sie das Fensterhandle des Dialogfelds als Parameter beim Aufruf von IsDialogMessage . Dadurch wird sichergestellt, dass das Dialogfeld ordnungsgemäß Tastaturmeldungen verarbeitet.

Zum Überwachen von Nachrichten aus dem Dialogfeld Ihren Fensterprozedur für die registrierte Nachricht FINDMSGSTRING überprüfen und Bearbeiten der Werte in der FINDREPLACE -Struktur wie im folgenden Beispiel übergeben:

LPFINDREPLACE Lpfr;

Wenn (Meldung == uFindReplaceMsg) {/ / Get Zeiger auf FINDREPLACE-Struktur von lParam.

Lpfr = (LPFINDREPLACE) lParam;

/ / Wenn das FR_DIALOGTERM-Flag festgelegt ist, / / das Handle, das Auswahldialogfeld für identifizierende ungültig. 

    Wenn (Lpfr-Gt;Flags & FR_DIALOGTERM) {Hdlg = NULL; 
        return 0; 
        } / / Wenn das FR_FINDNEXT-Flag festgelegt ist, / / die Anwendung definierte Suche-Routine aufrufen
    / / nach der angeforderten Zeichenfolge suchen. 

    Wenn (Lpfr - > Flags & FR_FINDNEXT) SearchFile (Lpfr - > LpstrFindWhat,
                   (BOOL) (Lpfr - > Flags & FR_DOWN), (BOOL) (Lpfr - > Flags & FR_MATCHCASE)); 

    return 0; 
 
} 

 

Index