Compartir vía


Clase CFindReplaceDialog

Le permite implementar los cuadros de diálogo Buscar/Reemplazar de cadena estándar en su aplicación.

Sintaxis

class CFindReplaceDialog : public CCommonDialog

Miembros

Constructores públicos

Nombre Descripción
CFindReplaceDialog::CFindReplaceDialog Llame a esta función para construir un objeto CFindReplaceDialog.

Métodos públicos

Nombre Descripción
CFindReplaceDialog::Create Crea y muestra un cuadro de diálogo CFindReplaceDialog.
CFindReplaceDialog::FindNext Llame a esta función para determinar si el usuario quiere encontrar la siguiente aparición de la cadena de búsqueda.
CFindReplaceDialog::GetFindString Llame a esta función para recuperar la cadena de búsqueda actual.
CFindReplaceDialog::GetNotifier Llame a esta función para recuperar la estructura FINDREPLACE del controlador de mensajes registrado.
CFindReplaceDialog::GetReplaceString Llame a esta función para recuperar la cadena de búsqueda actual.
CFindReplaceDialog::IsTerminating Llame a esta función para determinar si el cuadro de diálogo está finalizando.
CFindReplaceDialog::MatchCase Llame a esta función para determinar si el usuario quiere hacer coincidir exactamente la cadena de búsqueda.
CFindReplaceDialog::MatchWholeWord Llame a esta función para determinar si el usuario quiere hacer coincidir con palabras completas.
CFindReplaceDialog::ReplaceAll Llame a esta función para determinar si el usuario quiere que se reemplacen todas las apariciones de la cadena.
CFindReplaceDialog::ReplaceCurrent Llame a esta función para determinar si el usuario quiere que se reemplace la palabra actual.
CFindReplaceDialog::SearchDown Llame a esta función para determinar si el usuario quiere que la búsqueda continúe en una dirección descendente.

Miembros de datos públicos

Nombre Descripción
CFindReplaceDialog::m_fr Estructura utilizada para personalizar un objeto CFindReplaceDialog.

Comentarios

A diferencia de los otros cuadros de diálogo comunes de Windows, los objetos CFindReplaceDialog no tienen modelo, lo que permite a los usuarios interactuar con otras ventanas mientras están en pantalla. Hay dos tipos de objetos CFindReplaceDialog: cuadros de diálogo Buscar y cuadros de diálogo Buscar y reemplazar. Aunque los cuadros de diálogo permiten al usuario escribir cadenas de búsqueda y de búsqueda y reemplazo, no realizan ninguna de las funciones de búsqueda o reemplazo. Debe agregarlas a la aplicación.

Para construir un objeto CFindReplaceDialog, use el constructor proporcionado (que no tiene argumentos). Puesto que se trata de un cuadro de diálogo sin modelo, asigne el objeto en el montón mediante el operador new, en lugar de en la pila.

Una vez construido un objeto CFindReplaceDialog, debe llamar a la función miembro Crear para crear y mostrar el cuadro de diálogo.

Use la estructura m_fr para inicializar el cuadro de diálogo antes de llamar a Create. La estructura m_fr es de tipo FINDREPLACE. Para más información sobre esta estructura, consulte Windows SDK.

Para que la ventana primaria reciba una notificación de las solicitudes de búsqueda y reemplazo, debe usar la función RegisterWindowMessage de Windows y usar la macro de mapa de mensajes ON_REGISTERED_MESSAGE en la ventana de marco que controla este mensaje registrado.

Puede determinar si el usuario ha decidido finalizar el cuadro de diálogo con la función miembro IsTerminating.

CFindReplaceDialog se basa en el archivo COMMDLG.DLL que se incluye con las versiones 3.1 y posteriores de Windows.

Para personalizar el cuadro de diálogo, derive una clase de CFindReplaceDialog, proporcione una plantilla de diálogo personalizada y agregue un mapa de mensajes para procesar los mensajes de notificación de los controles extendidos. Los mensajes no procesados deben pasarse a la clase base.

No es necesario personalizar la función de enlace.

Para más información sobre el uso de CFindReplaceDialog, consulte Clases de cuadros de diálogo comunes.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFindReplaceDialog

Requisitos

Encabezado: afxdlgs.h

CFindReplaceDialog::CFindReplaceDialog

Construye un objeto CFindReplaceDialog.

CFindReplaceDialog();

Comentarios

Dado que el objeto CFindReplaceDialog es un cuadro de diálogo sin modelo, debe construirlo en el montón mediante el operador new.

Durante la destrucción, el marco intenta realizar un delete this; en el puntero al cuadro de diálogo. Si ha creado el cuadro de diálogo en la pila, el puntero this no existe y puede causar comportamiento indefinido.

Para obtener más información sobre la construcción de objetos CFindReplaceDialog, consulte la información general sobre CFindReplaceDialog. Use la función miembro CFindReplaceDialog::Create para mostrar el cuadro de diálogo.

Ejemplo

// m_pFRDlg is a pointer to a class derived from CFindReplaceDialog
// which defines variables used by the FINDREPLACE structure.
// InitFindReplaceDlg creates a CFindReplaceDialog and initializes
// the m_fr with the data members from the derived class
void CMyRichEditView::InitFindReplaceDlg()
{
   if (NULL == m_pFRDlg)
   {
      m_pFRDlg = new CMyFindReplaceDialog(); // Must be created on the heap

      m_pFRDlg->Create(TRUE, _T(""), _T(""), FR_DOWN, this);

      m_pFRDlg->m_fr.lStructSize = sizeof(FINDREPLACE);
      m_pFRDlg->m_fr.hwndOwner = this->m_hWnd;
      m_pFRDlg->m_fr.lpstrFindWhat = m_pFRDlg->GetFindWhatStr();
      m_pFRDlg->m_fr.lpstrReplaceWith = m_pFRDlg->GetReplaceWithStr();
      m_pFRDlg->m_fr.wFindWhatLen = m_pFRDlg->GetFindWhatStrLen();
      m_pFRDlg->m_fr.wReplaceWithLen = m_pFRDlg->GetReplaceWithStrLen();
   }
}

CFindReplaceDialog::Create

Crea y muestra un objeto de cuadro de diálogo Buscar o Buscar y Reemplazar, en función del valor de bFindDialogOnly.

virtual BOOL Create(
    BOOL bFindDialogOnly,
    LPCTSTR lpszFindWhat,
    LPCTSTR lpszReplaceWith = NULL,
    DWORD dwFlags = FR_DOWN,
    CWnd* pParentWnd = NULL);

Parámetros

bFindDialogOnly
Establezca este parámetro en TRUE para mostrar un cuadro de diálogo Buscar. Establézcalo en FALSE para mostrar un cuadro de diálogo Buscar o reemplazar.

lpszFindWhat
Puntero a la cadena de búsqueda predeterminada cuando aparece el cuadro de diálogo. Si es NULL, el cuadro de diálogo no contiene una cadena de búsqueda predeterminada.

lpszReplaceWith
Puntero a la cadena de reemplazo predeterminada cuando aparece el cuadro de diálogo. Si es NULL, el cuadro de diálogo no contiene una cadena de reemplazo predeterminada.

dwFlags
Puede usar una o varias marcas para personalizar la configuración del cuadro de diálogo, en combinación con el operador OR bit a bit. El valor predeterminado es FR_DOWN, que especifica que la búsqueda va a continuar en una dirección descendente. Consulte la estructura FINDREPLACE en Windows SDK para más información sobre estas marcas.

pParentWnd
Puntero a la ventana principal o propietaria del cuadro de diálogo. Esta es la ventana que recibirá el mensaje especial que indica que se solicita una acción de búsqueda o reemplazo. Si es NULL, se usa la ventana principal de la aplicación.

Valor devuelto

Distinto de cero si el objeto del cuadro de diálogo se creó correctamente; de lo contrario, 0.

Comentarios

Para que la ventana primaria reciba una notificación de las solicitudes de búsqueda o reemplazo, debe usar la función RegisterWindowMessage de Windows cuyo valor devuelto es un número de mensaje único para la instancia de la aplicación. La ventana de marco debe tener una entrada de mapa de mensajes que declare la función de devolución de llamada (OnFindReplace en el ejemplo siguiente) que controla este mensaje registrado. El fragmento de código siguiente es un ejemplo de cómo hacerlo para una clase de ventana de marco denominada CMyRichEditView:

// Message handler declared in CMyRichEditView class declaration
protected:
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);

 

// Register FindReplace window message.
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);

 

// Message map entry to map from message to handler function.
ON_REGISTERED_MESSAGE(WM_FINDREPLACE, &CMyRichEditView::OnFindReplace)

Dentro de la función OnFindReplace, interpretará las intenciones del usuario mediante los métodos CFindReplaceDialog::FindNext y CFindReplaceDialog::IsTerminating y creará el código para las operaciones de búsqueda y reemplazo.

Ejemplo

Vea el ejemplo de CFindReplaceDialog::CFindReplaceDialog.

CFindReplaceDialog::FindNext

Llame a esta función desde la función de devolución de llamadas para determinar si el usuario quiere encontrar la siguiente aparición de la cadena de búsqueda.

BOOL FindNext() const;

Valor devuelto

Distinto de cero si el usuario quiere encontrar la siguiente aparición de la cadena de búsqueda; de lo contrario, 0.

CFindReplaceDialog::GetFindString

Llame a esta función desde la función de devolución de llamadas para recuperar la cadena predeterminada que se va a buscar.

CString GetFindString() const;

Valor devuelto

La cadena predeterminada que se quiere encontrar.

Ejemplo

LRESULT CMyRichEditView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
   UNREFERENCED_PARAMETER(wparam);

   CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);

   if (NULL != pDlg)
   {
      // Use pDlg as a pointer to the existing FindReplace dlg to
      // call CFindReplaceDialog member functions
      if (pDlg->IsTerminating())
      {
         CString csFindString;
         CString csReplaceString;

         csFindString = pDlg->GetFindString();
         csReplaceString = pDlg->GetReplaceString();

         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("FindString"), csFindString));
         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("ReplaceString"), csReplaceString));
      }
   }

   return 0;
}

CFindReplaceDialog::GetNotifier

Llame a esta función para recuperar un puntero en el cuadro de diálogo Buscar y reemplazar.

static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);

Parámetros

lParam
Valor lparam pasado a la función miembro OnFindReplace de la ventana de marco.

Valor devuelto

Puntero al cuadro de diálogo actual.

Comentarios

Se debe usar en la función de devolución de llamada para acceder al cuadro de diálogo actual, llamar a sus funciones miembro y acceder a la estructura m_fr.

Ejemplo

Vea CFindReplaceDialog::Create para obtener un ejemplo de cómo registrar el controlador OnFindReplace para recibir notificaciones del cuadro de diálogo Buscar y reemplazar.

LRESULT CMyRichEditView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
   UNREFERENCED_PARAMETER(wparam);

   CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);

   if (NULL != pDlg)
   {
      // Use pDlg as a pointer to the existing FindReplace dlg to
      // call CFindReplaceDialog member functions
      if (pDlg->IsTerminating())
      {
         CString csFindString;
         CString csReplaceString;

         csFindString = pDlg->GetFindString();
         csReplaceString = pDlg->GetReplaceString();

         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("FindString"), csFindString));
         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("ReplaceString"), csReplaceString));
      }
   }

   return 0;
}

CFindReplaceDialog::GetReplaceString

Llame a esta función para recuperar la cadena de búsqueda actual.

CString GetReplaceString() const;

Valor devuelto

Cadena predeterminada por la que se reemplazarán las cadenas encontradas.

Ejemplo

Vea el ejemplo de CFindReplaceDialog::GetFindString.

CFindReplaceDialog::IsTerminating

Llame a esta función dentro de la función de devolución de llamada para determinar si el usuario ha decidido finalizar el cuadro de diálogo.

BOOL IsTerminating() const;

Valor devuelto

Distinto de cero si el usuario ha decidido finalizar el cuadro de diálogo; de lo contrario, 0.

Ejemplo

Vea el ejemplo de CFindReplaceDialog::GetFindString.

CFindReplaceDialog::m_fr

Se usa para personalizar un objeto CFindReplaceDialog.

FINDREPLACE m_fr;

Comentarios

m_fr es una estructura de tipo FINDREPLACE. Sus miembros almacenan las características del objeto de cuadro de diálogo. Después de construir un objeto CFindReplaceDialog, puede usar m_fr para modificar varios valores en el cuadro de diálogo.

Para obtener más información sobre esta estructura, consulte la estructura FINDREPLACE en Windows SDK.

Ejemplo

Vea el ejemplo de CFindReplaceDialog::CFindReplaceDialog.

CFindReplaceDialog::MatchCase

Llame a esta función para determinar si el usuario quiere hacer coincidir exactamente la cadena de búsqueda.

BOOL MatchCase() const;

Valor devuelto

Distinto de cero si el usuario quiere encontrar apariciones de la cadena de búsqueda que coincidan exactamente con el caso de la cadena de búsqueda; de lo contrario, 0.

CFindReplaceDialog::MatchWholeWord

Llame a esta función para determinar si el usuario quiere hacer coincidir con palabras completas.

BOOL MatchWholeWord() const;

Valor devuelto

Distinto de cero si el usuario quiere hacer coincidir solo con las palabras completas de la cadena de búsqueda; de lo contrario, 0.

CFindReplaceDialog::ReplaceAll

Llame a esta función para determinar si el usuario quiere que se reemplacen todas las apariciones de la cadena.

BOOL ReplaceAll() const;

Valor devuelto

Distinto de cero si el usuario ha solicitado que todas las cadenas que coincidan con la cadena de reemplazo se reemplacen; de lo contrario, 0.

CFindReplaceDialog::ReplaceCurrent

Llame a esta función para determinar si el usuario quiere que se reemplace la palabra actual.

BOOL ReplaceCurrent() const;

Valor devuelto

Distinto de cero si el usuario ha solicitado que la cadena seleccionada actualmente se reemplace por la cadena de reemplazo; de lo contrario, 0.

CFindReplaceDialog::SearchDown

Llame a esta función para determinar si el usuario quiere que la búsqueda continúe en una dirección descendente.

BOOL SearchDown() const;

Valor devuelto

Distinto de cero si el usuario quiere que la búsqueda continúe en una dirección descendente; 0 si el usuario quiere que la búsqueda continúe en una dirección ascendente.

Consulte también

CCommonDialog (clase)
Gráfico de jerarquías