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
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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 retorno
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.