Buscar y reemplazar cuadros de diálogo
Muestra un cuadro de diálogo modelado que permite al usuario especificar una cadena para buscar, así como opciones que se usarán al buscar texto en un documento. El cuadro de diálogo Reemplazar permite al usuario especificar una cadena para buscar y una cadena de reemplazo, así como opciones para controlar la operación.
Para crear y mostrar un cuadro de diálogo Buscar , inicialice una estructura FINDREPLACE y pase la estructura a la función FindText . En la ilustración siguiente se muestra un cuadro de diálogo Buscar típico.
Para crear y mostrar un cuadro de diálogo Reemplazar , inicialice una estructura FINDREPLACE y pase la estructura a la función ReplaceText . En la ilustración siguiente se muestra un cuadro de diálogo Reemplazar típico.
A diferencia de otros cuadros de diálogo comunes, los cuadros de diálogo Buscar y reemplazar son modelos. Un cuadro de diálogo modela permite al usuario cambiar entre el cuadro de diálogo y la ventana que la creó. Esto resulta útil para permitir que el usuario busque una cadena, cambie a la ventana de la aplicación para que funcione en la cadena y vuelva al cuadro de diálogo para buscar otra cadena sin repetir el comando necesario para abrir el cuadro de diálogo.
Si la función FindText o ReplaceText crea correctamente el cuadro de diálogo, devuelve un identificador al cuadro de diálogo. Puede usar este identificador para mover y comunicarse con el cuadro de diálogo. Si la función no puede crear el cuadro de diálogo, devuelve NULL. Puede determinar la causa de un error llamando a la función CommDlgExtendedError para recuperar el valor de error extendido.
En esta sección se describen los temas siguientes.
Mensaje registrado FINDMSGSTRING
Antes de crear un cuadro de diálogo Buscar o reemplazar , debe llamar a la función RegisterWindowMessage para obtener un identificador de mensaje para el mensaje registrado FINDMSGSTRING . A continuación, puede usar el identificador para detectar y procesar los mensajes enviados desde el cuadro de diálogo. Cuando el usuario hace clic en el botón Buscar siguiente, Reemplazar o Reemplazar todo en un cuadro de diálogo, el procedimiento del cuadro de diálogo envía un mensaje FINDMSGSTRING al procedimiento de ventana de la ventana del propietario. Al crear el cuadro de diálogo, el miembro hwndOwner de la estructura FINDREPLACE identifica la ventana del propietario.
El parámetro lParam de un mensaje FINDMSGSTRING es un puntero a la estructura FINDREPLACE que especificó al crear el cuadro de diálogo. Antes de enviar el mensaje, el cuadro de diálogo establece los miembros de esta estructura con la entrada de usuario más reciente, incluida la cadena que se va a buscar, la cadena de reemplazo (si existe) y las opciones de la operación de búsqueda y reemplazo.
En un mensaje FINDMSGSTRING , el miembro Flags de la estructura FINDREPLACE incluye una de las marcas siguientes para indicar el evento que provocó el mensaje.
Marca | Significado |
---|---|
FR_DIALOGTERM | El cuadro de diálogo se está cerrando. Una vez que la ventana del propietario procesa este mensaje, un identificador para el cuadro de diálogo ya no es válido. |
FR_FINDNEXT | El usuario ha clic en el botón Buscar siguiente en un cuadro de diálogo Buscar o reemplazar . El miembro lpstrFindWhat especifica la cadena que se va a buscar. |
FR_REPLACE | El usuario ha clic en el botón Reemplazar en un cuadro de diálogo Reemplazar . El miembro lpstrFindWhat especifica la cadena que se va a reemplazar y el miembro lpstrReplaceWith especifica la cadena de reemplazo. |
FR_REPLACEALL | El usuario ha clic en el botón Reemplazar todo en un cuadro de diálogo Reemplazar . El miembro lpstrFindWhat especifica la cadena que se va a reemplazar y el miembro lpstrReplaceWith especifica la cadena de reemplazo. |
En el caso de un mensaje Buscar siguiente o Reemplazar todo , el miembro Flags puede incluir cualquier combinación de las marcas siguientes para indicar las opciones de búsqueda.
Marca | Significado |
---|---|
FR_DOWN | Si se establece, se selecciona el botón Bajar de los botones de radio de dirección, lo que indica que el usuario quiere buscar desde la ubicación actual hasta el final del documento. Si no se establece FR_DOWN, se selecciona el botón Subir para que el usuario quiera buscar al principio del documento. |
FR_MATCHCASE | Si se establece, la casilla Coincidir mayúsculas y minúsculas está activada, lo que indica que el usuario quiere que la búsqueda tenga distinción entre mayúsculas y minúsculas. Si no se establece FR_MATCHCASE, la casilla no está seleccionada para que la búsqueda pueda distinguir mayúsculas de minúsculas. |
FR_WHOLEWORD | Si se establece, la casilla Coincidir todo Word solo está activada, lo que indica que el usuario desea buscar solo palabras completas que coincidan con la cadena de búsqueda. Si no se establece FR_WHOLEWORD, la casilla no está seleccionada, por lo que también debe buscar fragmentos de palabras que coincidan con la cadena de búsqueda. |
Personalización del cuadro de diálogo Buscar o reemplazar
Para personalizar un cuadro de diálogo Buscar o reemplazar , puede usar cualquiera de los métodos siguientes:
- Especificar valores en la estructura FINDREPLACE al crear el cuadro de diálogo
- Proporcionar una plantilla personalizada
- Proporcionar un procedimiento de enlace
Al crear un cuadro de diálogo Buscar o reemplazar , puede establecer marcas en el miembro Flags de la estructura FINDREPLACE para ocultar o deshabilitar cualquiera de los controles de opción de búsqueda. Por ejemplo, puede establecer la marca FR_NOMATCHCASE para deshabilitar la casilla Coincidir mayúsculas y minúsculas o establecer la marca FR_HIDEMATCHCASE para ocultarla.
Puede proporcionar una plantilla personalizada para un cuadro de diálogo Buscar o reemplazar , por ejemplo, si desea incluir controles adicionales que sean exclusivos de la aplicación. Las funciones FindText y ReplaceText usan la plantilla personalizada en lugar de la plantilla predeterminada.
Para proporcionar una plantilla personalizada para un cuadro de diálogo Buscar o reemplazar
- Cree la plantilla personalizada modificando la plantilla predeterminada especificada en el archivo Findtext.dlg. Los identificadores de control usados en la plantilla de diálogo Buscar o Reemplazar predeterminada se definen en el archivo Dlgs.h.
- Use la estructura FINDREPLACE para habilitar la plantilla de la siguiente manera:
-
Si la plantilla personalizada es un recurso de una aplicación o biblioteca de vínculos dinámicos, establezca la marca FR_ENABLETEMPLATE en el miembro Flags . Use los miembros hInstance y lpTemplateName de la estructura para identificar el nombre del módulo y del recurso.
-O bien-
Si la plantilla personalizada ya está en memoria, establezca la marca FR_ENABLETEMPLATEHANDLE. Use el miembro hInstance para identificar el objeto de memoria que contiene la plantilla.
-
Puede proporcionar un procedimiento de enlace FRHookProc para un cuadro de diálogo Buscar o reemplazar . El procedimiento de enlace puede procesar los mensajes enviados al cuadro de diálogo. Si usa una plantilla personalizada para definir controles adicionales, debe proporcionar un procedimiento de enlace para procesar la entrada de los controles.
Para habilitar un procedimiento de enlace para un cuadro de diálogo Buscar o reemplazar
- Establezca la marca FR_ENABLEHOOK en el miembro Flags de la estructura FINDREPLACE .
- Especifique la dirección del procedimiento de enlace en el miembro lpfnHook .
Después de procesar su mensaje de WM_INITDIALOG , el procedimiento del cuadro de diálogo envía un mensaje WM_INITDIALOG al procedimiento de enlace. El parámetro lParam de este mensaje es un puntero a la estructura FINDREPLACE utilizada para inicializar el cuadro de diálogo.
Si el procedimiento de enlace devuelve FALSE en respuesta al mensaje WM_INITDIALOG , el cuadro de diálogo no se mostrará a menos que el procedimiento de enlace lo muestre. Para ello, realice primero cualquier otra operación de pintura y, a continuación, llame a las funciones ShowWindow y UpdateWindow . El siguiente fragmento de código muestra un ejemplo:
// 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);