Compartilhar via


Classe CFindReplaceDialog

Permite implementar caixas de diálogo Localizar/Substituir de cadeia de caracteres padrão em seu aplicativo.

Sintaxe

class CFindReplaceDialog : public CCommonDialog

Membros

Construtores públicos

Nome Descrição
CFindReplaceDialog::CFindReplaceDialog Chame essa função para construir um objeto CFindReplaceDialog.

Métodos públicos

Nome Descrição
CFindReplaceDialog::Create Cria e exibe uma caixa de diálogo CFindReplaceDialog.
CFindReplaceDialog::FindNext Chame essa função para determinar se o usuário deseja localizar a próxima ocorrência da cadeia de caracteres de localização.
CFindReplaceDialog::GetFindString Chame essa função para recuperar a cadeia de caracteres de localização atual.
CFindReplaceDialog::GetNotifier Chame essa função para recuperar a estrutura FINDREPLACE no manipulador de mensagens registrado.
CFindReplaceDialog::GetReplaceString Chame essa função para recuperar a cadeia de caracteres de substituição atual.
CFindReplaceDialog::IsTerminating Chame essa função para determinar se a caixa de diálogo está terminando.
CFindReplaceDialog::MatchCase Chame essa função para determinar se o usuário deseja uma correspondência exata ao uso de maiúsculas e minúsculas da cadeia de caracteres de localização.
CFindReplaceDialog::MatchWholeWord Chame essa função para determinar se o usuário deseja apenas correspondência de palavras inteiras.
CFindReplaceDialog::ReplaceAll Chame essa função para determinar se o usuário deseja que todas as ocorrências da cadeia de caracteres sejam substituídas.
CFindReplaceDialog::ReplaceCurrent Chame essa função para determinar se o usuário deseja que a palavra atual seja substituída.
CFindReplaceDialog::SearchDown Chame essa função para determinar se o usuário deseja que a pesquisa prossiga em direção descendente.

Membros de Dados Públicos

Nome Descrição
CFindReplaceDialog::m_fr Uma estrutura usada para personalizar um objeto CFindReplaceDialog.

Comentários

Ao contrário das outras caixas de diálogo comuns do Windows, os objetos CFindReplaceDialog são sem modo, permitindo que os usuários interajam com outras janelas enquanto estiverem na tela. Há dois tipos de objetos CFindReplaceDialog: caixas de diálogo Localizar e caixas de diálogo Localizar/Substituir. Embora as caixas de diálogo permitam que o usuário insira cadeias de caracteres de pesquisa e de pesquisa/substituição, elas não executam nenhuma das funções de pesquisa ou substituição. Você precisa adicioná-las ao aplicativo.

Para construir um objeto CFindReplaceDialog, use o construtor fornecido (que não tem argumentos). Como essa é uma caixa de diálogo sem modo, aloque o objeto no heap usando o operador new, em vez de na pilha.

Depois que um objeto CFindReplaceDialog for construído, você deverá chamar a função membro Create para criar e exibir a caixa de diálogo.

Use a estrutura m_fr para inicializar a caixa de diálogo antes de chamar Create. A estrutura m_fr é do tipo FINDREPLACE. Para obter mais informações sobre essa estrutura, confira o SDK do Windows.

Para que a janela pai seja notificada sobre solicitações de localização/substituição, você precisa usar a função Windows RegisterWindowMessage e usar a macro de mapa de mensagens ON_REGISTERED_MESSAGE na janela do quadro que manipula essa mensagem registrada.

Você pode determinar se o usuário decidiu encerrar a caixa de diálogo com a função membro IsTerminating.

CFindReplaceDialog depende do arquivo COMMDLG.DLL que é fornecido com as versões 3.1 e posteriores do Windows.

Para personalizar a caixa de diálogo, derive uma classe de CFindReplaceDialog, forneça um modelo de caixa de diálogo personalizado e adicione um mapa de mensagem para processar as mensagens de notificação dos controles estendidos. Todas as mensagens não processadas devem ser passadas para a classe base.

A personalização da função de gancho não é necessária.

Para obter mais informações sobre como usar CFindReplaceDialog, confira Classes de diálogo comuns.

Hierarquia de herança

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFindReplaceDialog

Requisitos

Cabeçalho: afxdlgs.h

CFindReplaceDialog::CFindReplaceDialog

Constrói um objeto CFindReplaceDialog.

CFindReplaceDialog();

Comentários

Como o objeto CFindReplaceDialog é uma caixa de diálogo sem modo, você precisa construí-lo no heap usando o operador new.

Durante a destruição, a estrutura tenta executar um delete this; no ponteiro para a caixa de diálogo. Se você criou a caixa de diálogo na pilha, o ponteiro this não existe e isso pode resultar em comportamento indefinido.

Para obter mais informações sobre a construção de objetos CFindReplaceDialog, confira a visão geral de CFindReplaceDialog. Use a função membro CFindReplaceDialog::Create para exibir a caixa de diálogo.

Exemplo

// 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

Cria e exibe um objeto de caixa de diálogo Localizar ou Localizar/Substituir, dependendo do valor de bFindDialogOnly.

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

Parâmetros

bFindDialogOnly
Defina esse parâmetro como TRUE para exibir uma caixa de diálogo Localizar. Defina-o como FALSE para exibir uma caixa de diálogo Localizar/Substituir.

lpszFindWhat
Ponteiro para a cadeia de caracteres de pesquisa padrão quando a caixa de diálogo é exibida. Se for NULL, a caixa de diálogo não conterá uma cadeia de caracteres de pesquisa padrão.

lpszReplaceWith
Ponteiro para a cadeia de caracteres de substituição padrão quando a caixa de diálogo é exibida. Se for NULL, a caixa de diálogo não conterá uma cadeia de caracteres de substituição padrão.

dwFlags
Um ou mais sinalizadores que você pode usar para personalizar as configurações da caixa de diálogo, combinados usando o operador OR bit a bit. O valor padrão é FR_DOWN, que especifica que a pesquisa deve continuar em direção descendente. Confira a estrutura FINDREPLACE no SDK do Windows para obter mais informações sobre esses sinalizadores.

pParentWnd
Um ponteiro para a janela pai ou proprietária da caixa de diálogo. Essa é a janela que receberá a mensagem especial indicando que uma ação de localização/substituição foi solicitada. Se for NULL, a janela principal do aplicativo será usada.

Valor de Devolução

Diferente de zero se o objeto da caixa de diálogo foi criado com êxito; caso contrário, 0.

Comentários

Para que a janela pai seja notificada sobre solicitações de localização/substituição, você precisa usar a função Windows RegisterWindowMessage cujo valor retornado é um número de mensagem exclusivo para a instância do aplicativo. Sua janela do quadro deve ter uma entrada de mapa de mensagem que declare a função de retorno de chamada (OnFindReplace no exemplo a seguir) que manipula essa mensagem registrada. O seguinte fragmento de código é um exemplo de como fazer isso para uma classe de janela do quadro chamada 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)

Em sua função OnFindReplace, você interpreta as intenções do usuário usando os métodos CFindReplaceDialog::FindNext e CFindReplaceDialog::IsTerminating e cria o código para as operações de localização/substituição.

Exemplo

Confira o exemplo de CFindReplaceDialog::CFindReplaceDialog.

CFindReplaceDialog::FindNext

Chame essa função da função de retorno de chamada para determinar se o usuário deseja localizar a próxima ocorrência da cadeia de caracteres de pesquisa.

BOOL FindNext() const;

Valor de Devolução

Diferente de zero se o usuário quiser localizar a próxima ocorrência da cadeia de caracteres de pesquisa; caso contrário, 0.

CFindReplaceDialog::GetFindString

Chame essa função da função de retorno de chamada para recuperar a cadeia de caracteres padrão a ser encontrada.

CString GetFindString() const;

Valor de Devolução

A cadeia de caracteres padrão a ser encontrada.

Exemplo

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

Chame essa função para recuperar um ponteiro para a caixa de diálogo Localizar/Substituir atual.

static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);

Parâmetros

lParam
O valor lparam passado para a função membro OnFindReplace da janela do quadro.

Valor de Devolução

Um ponteiro para a caixa de diálogo atual.

Comentários

Ele deve ser usado em sua função de retorno de chamada para acessar a caixa de diálogo atual, chamar as respectivas funções membro e acessar a estrutura m_fr.

Exemplo

Confira CFindReplaceDialog::Create para obter um exemplo de como registrar o manipulador OnFindReplace para receber notificações da caixa de diálogo Localizar/Substituir.

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

Chame essa função para recuperar a cadeia de caracteres de substituição atual.

CString GetReplaceString() const;

Valor de Devolução

A cadeia de caracteres padrão com a qual substituir as cadeias de caracteres encontradas.

Exemplo

Confira o exemplo de CFindReplaceDialog::GetFindString.

CFindReplaceDialog::IsTerminating

Chame essa função dentro de sua função de retorno de chamada para determinar se o usuário decidiu encerrar a caixa de diálogo.

BOOL IsTerminating() const;

Valor de Devolução

Diferente de zero se o usuário decidiu encerrar a caixa de diálogo; caso contrário, 0.

Exemplo

Confira o exemplo de CFindReplaceDialog::GetFindString.

CFindReplaceDialog::m_fr

Usado para personalizar um objeto CFindReplaceDialog.

FINDREPLACE m_fr;

Comentários

m_fr é uma estrutura do tipo FINDREPLACE. Os membros dela armazenam as características do objeto da caixa de diálogo. Depois de construir um objeto CFindReplaceDialog, você pode usar m_fr para modificar vários valores na caixa de diálogo.

Para obter mais informações sobre essa estrutura, confira a estrutura FINDREPLACE no SDK do Windows.

Exemplo

Confira o exemplo de CFindReplaceDialog::CFindReplaceDialog.

CFindReplaceDialog::MatchCase

Chame essa função para determinar se o usuário deseja uma correspondência exata ao uso de maiúsculas e minúsculas da cadeia de caracteres de localização.

BOOL MatchCase() const;

Valor de Devolução

Diferente de zero se o usuário quiser encontrar ocorrências da cadeia de caracteres de pesquisa que correspondam exatamente ao caso da cadeia de caracteres de pesquisa; caso contrário, 0.

CFindReplaceDialog::MatchWholeWord

Chame essa função para determinar se o usuário deseja apenas correspondência de palavras inteiras.

BOOL MatchWholeWord() const;

Valor de Devolução

Diferente de zero se o usuário quiser corresponder apenas às palavras inteiras da cadeia de caracteres de pesquisa; caso contrário, 0.

CFindReplaceDialog::ReplaceAll

Chame essa função para determinar se o usuário deseja que todas as ocorrências da cadeia de caracteres sejam substituídas.

BOOL ReplaceAll() const;

Valor de Devolução

Diferente de zero se o usuário solicitou que todas as cadeias de caracteres correspondentes à cadeia de caracteres de substituição fossem substituídas; caso contrário, 0.

CFindReplaceDialog::ReplaceCurrent

Chame essa função para determinar se o usuário deseja que a palavra atual seja substituída.

BOOL ReplaceCurrent() const;

Valor de Devolução

Diferente de zero se o usuário solicitou que a cadeia de caracteres selecionada no momento fosse substituída pela cadeia de caracteres de substituição; caso contrário, 0.

CFindReplaceDialog::SearchDown

Chame essa função para determinar se o usuário deseja que a pesquisa prossiga em direção descendente.

BOOL SearchDown() const;

Valor de Devolução

Diferente de zero se o usuário quiser que a pesquisa prossiga em direção descendente; 0 se o usuário quiser que a pesquisa prossiga em direção ascendente.

Confira também

Classe CCommonDialog
Gráfico da hierarquia