Sök efter och ersätt dialogrutor
Visar en lägeslös dialogruta som gör att användaren kan ange en sträng att söka efter, samt alternativ att använda när de söker efter text i ett dokument. I dialogrutan Ersätt kan användaren ange en sträng att söka efter och en ersättningssträng samt alternativ för att styra åtgärden.
Du skapar och visar dialogrutan Hitta genom att initiera en FINDREPLACE- struktur och skicka strukturen till funktionen FindText. Följande bild visar en typisk dialogruta Sök.
Du skapar och visar dialogrutan Ersätt genom att initiera en FINDREPLACE- struktur och skicka strukturen till funktionen ReplaceText. Följande bild visar en typisk dialogruta Ersätt.
dialogrutan
Till skillnad från andra vanliga dialogrutor är dialogrutorna Find och Replace lägeslösa. Med en lägeslös dialogruta kan användaren växla mellan dialogrutan och fönstret som skapade den. Detta är användbart för att låta användaren söka efter en sträng, växla till programfönstret för att arbeta med strängen och växla tillbaka till dialogrutan för att söka efter en annan sträng utan att upprepa kommandot som behövs för att öppna dialogrutan.
Om funktionen FindText eller ReplaceText skapar dialogrutan returneras ett handtag till dialogrutan. Du kan använda det här handtaget för att flytta och kommunicera med dialogrutan. Om funktionen inte kan skapa dialogrutan returneras NULL-. Du kan fastställa orsaken till ett fel genom att anropa funktionen CommDlgExtendedError för att hämta det utökade felvärdet.
I det här avsnittet beskrivs följande avsnitt.
DET REGISTRERADE MEDDELANDET FINDMSGSTRING
Innan du skapar dialogrutan Hitta eller Ersätt måste du anropa funktionen RegisterWindowMessage för att hämta en meddelandeidentifierare för FINDMSGSTRING- registrerat meddelande. Du kan sedan använda identifieraren för att identifiera och bearbeta meddelanden som skickas från dialogrutan. När användaren klickar på knappen Sök nästa, Ersätteller Ersätt alla i en dialogruta skickar dialogrutan ett FINDMSGSTRING- meddelande till fönsterproceduren i ägarfönstret. När du skapar dialogrutan identifierar hwndOwner medlem i FINDREPLACE- struktur ägarfönstret.
Parametern lParam för ett FINDMSGSTRING- meddelande är en pekare till FINDREPLACE- struktur som du angav när du skapade dialogrutan. Innan meddelandet skickas anger dialogrutan medlemmarna i den här strukturen med de senaste användarindata, inklusive strängen att söka efter, ersättningssträngen (om någon) och alternativ för åtgärden find-and-replace.
I ett FINDMSGSTRING- meddelande innehåller Flags medlem i FINDREPLACE- struktur en av följande flaggor för att ange händelsen som orsakade meddelandet.
Flagga | Betydelse |
---|---|
FR_DIALOGTERM | Dialogrutan stängs. När ägarfönstret har bearbetat det här meddelandet är en referens till dialogrutan inte längre giltig. |
FR_FINDNEXT | Användaren klickade på knappen Hitta nästa i dialogrutan Sök eller Ersätt. lpstrFindWhat medlem anger strängen som ska sökas efter. |
FR_REPLACE | Användaren klickade på knappen Ersätt i dialogrutan Ersätt. lpstrFindWhat medlem anger vilken sträng som ska ersättas och lpstrReplaceWith medlem anger ersättningssträngen. |
FR_REPLACEALL | Användaren klickade på knappen Ersätt alla i en dialogrutan Ersätt. lpstrFindWhat medlem anger vilken sträng som ska ersättas och lpstrReplaceWith medlem anger ersättningssträngen. |
För meddelandet Hitta nästa eller Ersätt alla kan Flags medlem inkludera valfri kombination av följande flaggor för att ange sökalternativen.
Flagga | Betydelse |
---|---|
FR_DOWN | Om inställningen är inställd väljs knappen Nedåt i riktningsknapparna, vilket anger att användaren vill söka från den aktuella platsen till slutet av dokumentet. Om FR_DOWN inte har angetts väljs knappen Upp så att användaren vill söka i början av dokumentet. |
FR_MATCHCASE | Om den anges markeras kryssrutan Match Case, vilket anger att användaren vill att sökningen ska vara skiftlägeskänslig. Om FR_MATCHCASE inte har angetts avmarkeras kryssrutan så att sökningen kan vara skiftlägesokänslig. |
FR_WHOLEWORD | Om det anges markeras kryssrutan Matcha endast helt ord, vilket anger att användaren bara vill söka efter hela ord som matchar söksträngen. Om FR_WHOLEWORD inte har angetts är kryssrutan avmarkerad, så du bör också söka efter ordfragment som matchar söksträngen. |
Anpassa dialogrutan Sök eller Ersätt
Om du vill anpassa en dialogrutan Sök efter eller Ersätt kan du använda någon av följande metoder:
- Ange värden i FINDREPLACE- struktur när du skapar dialogrutan
- Ange en anpassad mall
- Ange en krokprocedur
När du skapar en dialogrutan Sök efter eller Ersätt kan du ange flaggor i Flaggor medlem i FINDREPLACE- struktur för att dölja eller inaktivera någon av sökalternativkontrollerna. Du kan till exempel ange flaggan FR_NOMATCHCASE för att inaktivera kryssrutan Match Case eller ange flaggan FR_HIDEMATCHCASE för att dölja den.
Du kan ange en anpassad mall för en dialogrutan Sök efter eller Ersätt, till exempel om du vill inkludera ytterligare kontroller som är unika för ditt program. Funktionerna FindText och ReplaceText använder din anpassade mall i stället för standardmallen.
Ange en anpassad mall för dialogrutan Sök eller Ersätt
- Skapa den anpassade mallen genom att ändra standardmallen som anges i filen Findtext.dlg. De kontrollidentifierare som används i standardmallen Sök eller Ersätt definieras i filen Dlgs.h.
- Använd FINDREPLACE--strukturen för att aktivera mallen på följande sätt:
-
Om din anpassade mall är en resurs i ett program- eller dynamiskt länkbibliotek anger du flaggan FR_ENABLETEMPLATE i Flags medlem. Använd hInstance och lpTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet.
-Eller-
Om den anpassade mallen redan finns i minnet anger du flaggan FR_ENABLETEMPLATEHANDLE. Använd hInstance medlem för att identifiera det minnesobjekt som innehåller mallen.
-
Du kan ange en FRHookProc hook-procedur för en dialogrutan Hitta eller Ersätt. Hook-proceduren kan bearbeta meddelanden som skickas till dialogrutan. Om du använder en anpassad mall för att definiera ytterligare kontroller måste du ange en krokprocedur för att bearbeta indata för dina kontroller.
Aktivera en krokprocedur för en sök- eller ersätt-dialogruta
- Ange flaggan FR_ENABLEHOOK i Flags medlem i FINDREPLACE- struktur.
- Ange adressen för hookproceduren i lpfnHook medlem.
När du har bearbetat dess WM_INITDIALOG meddelande skickar dialogruteproceduren ett WM_INITDIALOG meddelande till krokproceduren. Parametern lParam i det här meddelandet är en pekare till FINDREPLACE- struktur som används för att initiera dialogrutan.
Om krokproceduren returnerar FALSE- som svar på WM_INITDIALOG meddelande visas inte dialogrutan om inte krokproceduren visar den. Det gör du genom att först utföra andra färgåtgärder och sedan anropa funktionerna ShowWindow och UpdateWindow. Följande kod innehåller ett exempel:
// 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);