Compartir a través de


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ónFindText de. En la ilustración siguiente se muestra un cuadro de diálogo típico Buscar.

cuadro de diálogo Buscar

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 típico Reemplazar.

cuadro de diálogo reemplazar

A diferencia de otros cuadros de diálogo comunes, los cuadros de diálogo Buscar y Reemplazar son modelos. Un cuadro de diálogo modeless 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 Buscar o cuadro de diálogo 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 mensajes enviados desde el cuadro de diálogo. Cuando el usuario hace clic en el botón Buscar siguiente, reemplazaro botón 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 del findREPLACE estructura identifica la ventana del propietario.

El parámetro lParam de un mensaje FINDMSGSTRING es un puntero a la estructuraFINDREPLACE 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 de FINDMSGSTRING, el miembro Flags del FINDREPLACE estructura incluye una de las marcas siguientes para indicar el evento que provocó el mensaje.

Bandera Significado
FR_DIALOGTERM El cuadro de diálogo se está cerrando. Una vez que la ventana del propietario procesa este mensaje, ya no es válido un identificador para el cuadro de diálogo.
FR_FINDNEXT El usuario ha clic en el botón Buscar siguiente en un Buscar o cuadro de diálogo 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.

 

Para un Buscar siguiente o mensaje Reemplazar todo, el miembro Flags puede incluir cualquier combinación de las marcas siguientes para indicar las opciones de búsqueda.

Bandera Significado
FR_DOWN Si se establece, se selecciona el botón Abajo 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 Arriba 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 distingue mayúsculas de minúsculas. Si no se establece FR_MATCHCASE, la casilla no está seleccionada para que la búsqueda pueda no distinguir entre mayúsculas y minúsculas.
FR_WHOLEWORD Si se establece, la casilla Coincidir solo palabra completa 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 palabra que coincidan con la cadena de búsqueda.

 

Personalizar el cuadro de diálogo Buscar o reemplazar

Para personalizar un buscar o cuadro de diálogo Reemplazar, puede usar cualquiera de los métodos siguientes:

  • Especificar valores en la estructurafindREPLACEal crear el cuadro de diálogo
  • Proporcionar una plantilla personalizada
  • Proporcionar un procedimiento de enlace

Al crear un buscar o cuadro de diálogo Reemplazar, puede establecer marcas en el miembro Flags del FINDREPLACE estructura 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 una Buscar o cuadro de diálogo Reemplazar, por ejemplo, si desea incluir controles adicionales que sean únicos para 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

  1. Cree la plantilla personalizada modificando la plantilla predeterminada especificada en el archivo Findtext.dlg. Los identificadores de control usados en el predeterminado Buscar o plantilla de diálogo Reemplazar se definen en el archivo Dlgs.h.
  2. Use la estructuraFINDREPLACE 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 de FR_ENABLETEMPLATE en el miembro Flags. Use el hInstance y lpTemplateName miembros de la estructura para identificar el nombre del módulo y del recurso.

        -O-

      • 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 deFRHookProcpara un Buscar o cuadro de diálogo 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

  1. Establezca la marca FR_ENABLEHOOK en el miembro de Flags de la estructura FINDREPLACE.
  2. Especifique la dirección del procedimiento de enlace en el miembro lpfnHook.

Después de procesar su WM_INITDIALOG mensaje, 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 usada para inicializar el cuadro de diálogo.

Si el procedimiento de enlace devuelve FALSE en respuesta al mensaje de WM_INITDIALOG, el cuadro de diálogo no se mostrará a menos que el procedimiento de enlace lo muestre. Para ello, primero realice cualquier otra operación de pintura y, a continuación, llame a las funciones ShowWindow y UpdateWindow. El código siguiente proporciona 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);