Caixas de diálogo Localizar e Substituir
Exibe uma caixa de diálogo de modelagem que permite que o usuário especifique uma cadeia de caracteres a ser pesquisada, bem como opções a serem usadas ao pesquisar texto em um documento. A caixa de diálogo Substituir permite que o usuário especifique uma cadeia de caracteres para pesquisar e uma cadeia de caracteres de substituição, bem como opções para controlar a operação.
Você cria e exibe uma caixa de diálogo Localizar inicializando uma estrutura FINDREPLACE e passando a estrutura para a função FindText . A ilustração a seguir mostra uma caixa de diálogo Localizar típica.
Você cria e exibe uma caixa de diálogo Substituir inicializando uma estrutura FINDREPLACE e passando a estrutura para a função ReplaceText . A ilustração a seguir mostra uma caixa de diálogo Substituir típica.
Ao contrário de outras caixas de diálogo comuns, as caixas de diálogo Localizar e Substituir são modeless. Uma caixa de diálogo de modelagem permite que o usuário alterne entre a caixa de diálogo e a janela que a criou. Isso é útil para permitir que o usuário pesquise uma cadeia de caracteres, alterne para a janela do aplicativo para funcionar na cadeia de caracteres e volte para a caixa de diálogo para pesquisar outra cadeia de caracteres sem repetir o comando necessário para abrir a caixa de diálogo.
Se a função FindText ou ReplaceText criar com êxito a caixa de diálogo, ela retornará um identificador para a caixa de diálogo. Você pode usar esse identificador para mover e se comunicar com a caixa de diálogo. Se a função não puder criar a caixa de diálogo, ela retornará NULL. Você pode determinar a causa de um erro chamando a função CommDlgExtendedError para recuperar o valor de erro estendido.
Esta seção discute os tópicos a seguir.
A mensagem registrada FINDMSGSTRING
Antes de criar uma caixa de diálogo Localizar ou Substituir , você deve chamar a função RegisterWindowMessage para obter um identificador de mensagem para a mensagem registrada FINDMSGSTRING . Em seguida, você pode usar o identificador para detectar e processar mensagens enviadas da caixa de diálogo. Quando o usuário clica no botão Localizar Próximo, Substituir ou Substituir Tudo em uma caixa de diálogo, o procedimento da caixa de diálogo envia uma mensagem FINDMSGSTRING para o procedimento de janela da janela do proprietário. Quando você cria a caixa de diálogo, o membro hwndOwner da estrutura FINDREPLACE identifica a janela de proprietário.
O parâmetro lParam de uma mensagem FINDMSGSTRING é um ponteiro para a estrutura FINDREPLACE especificada quando você criou a caixa de diálogo. Antes de enviar a mensagem, a caixa de diálogo define os membros dessa estrutura com a entrada mais recente do usuário, incluindo a cadeia de caracteres a ser pesquisada, a cadeia de caracteres de substituição (se houver) e as opções para a operação find-and-replace.
Em uma mensagem FINDMSGSTRING , o membro Flags da estrutura FINDREPLACE inclui um dos sinalizadores a seguir para indicar o evento que causou a mensagem.
Sinalizador | Significado |
---|---|
FR_DIALOGTERM | A caixa de diálogo está fechando. Depois que a janela do proprietário processa essa mensagem, um identificador para a caixa de diálogo não é mais válido. |
FR_FINDNEXT | O usuário clicou no botão Localizar Próximo em uma caixa de diálogo Localizar ou Substituir . O membro lpstrFindWhat especifica a cadeia de caracteres a ser pesquisada. |
FR_REPLACE | O usuário clicou no botão Substituir em uma caixa de diálogo Substituir . O membro lpstrFindWhat especifica a cadeia de caracteres a ser substituída e o membro lpstrReplaceWith especifica a cadeia de caracteres de substituição. |
FR_REPLACEALL | O usuário clicou no botão Substituir Tudo em uma caixa de diálogo Substituir . O membro lpstrFindWhat especifica a cadeia de caracteres a ser substituída e o membro lpstrReplaceWith especifica a cadeia de caracteres de substituição. |
Para uma mensagem Localizar Próximo ou Substituir Tudo , o membro Flags pode incluir qualquer combinação dos sinalizadores a seguir para indicar as opções de pesquisa.
Sinalizador | Significado |
---|---|
FR_DOWN | Se definido, o botão Para baixo dos botões de opção de direção será selecionado, indicando que o usuário deseja pesquisar do local atual até o final do documento. Se FR_DOWN não estiver definido, o botão Para cima será selecionado para que o usuário queira pesquisar até o início do documento. |
FR_MATCHCASE | Se definido, a caixa Marcar de Correspondência de Caso será selecionada, indicando que o usuário deseja que a pesquisa seja sensível a maiúsculas e minúsculas. Se FR_MATCHCASE não estiver definida, a caixa marcar será desmarcada para que a pesquisa possa não diferenciar maiúsculas de minúsculas. |
FR_WHOLEWORD | Se definido, a caixa Corresponder Word Somente marcar será selecionada, indicando que o usuário deseja pesquisar apenas palavras inteiras que correspondam à cadeia de caracteres de pesquisa. Se FR_WHOLEWORD não estiver definida, a caixa marcar será desmarcada, portanto, você também deverá procurar fragmentos de palavra que correspondam à cadeia de caracteres de pesquisa. |
Personalizando a caixa de diálogo Localizar ou Substituir
Para personalizar uma caixa de diálogo Localizar ou Substituir , você pode usar qualquer um dos seguintes métodos:
- Especifique valores na estrutura FINDREPLACE ao criar a caixa de diálogo
- Fornecer um modelo personalizado
- Fornecer um procedimento de gancho
Ao criar uma caixa de diálogo Localizar ou Substituir , você pode definir sinalizadores no membro Flags da estrutura FINDREPLACE para ocultar ou desabilitar qualquer um dos controles de opção de pesquisa. Por exemplo, você pode definir o sinalizador FR_NOMATCHCASE para desabilitar a caixa Marcar de Correspondência ou definir o sinalizador FR_HIDEMATCHCASE para ocultá-lo.
Você pode fornecer um modelo personalizado para uma caixa de diálogo Localizar ou Substituir , por exemplo, se quiser incluir controles adicionais exclusivos para seu aplicativo. As funções FindText e ReplaceText usam seu modelo personalizado no lugar do modelo padrão.
Para fornecer um modelo personalizado para uma caixa de diálogo Localizar ou Substituir
- Crie o modelo personalizado modificando o modelo padrão especificado no arquivo Findtext.dlg. Os identificadores de controle usados no modelo de caixa de diálogo Localizar ou Substituir padrão são definidos no arquivo Dlgs.h.
- Use a estrutura FINDREPLACE para habilitar o modelo da seguinte maneira:
-
Se o modelo personalizado for um recurso em um aplicativo ou biblioteca de link dinâmico, defina o sinalizador FR_ENABLETEMPLATE no membro Flags . Use os membros hInstance e lpTemplateName da estrutura para identificar o módulo e o nome do recurso.
-Ou-
Se o modelo personalizado já estiver na memória, defina o sinalizador FR_ENABLETEMPLATEHANDLE. Use o membro hInstance para identificar o objeto de memória que contém o modelo.
-
Você pode fornecer um procedimento de gancho FRHookProc para uma caixa de diálogo Localizar ou Substituir . O procedimento de gancho pode processar mensagens enviadas para a caixa de diálogo. Se você usar um modelo personalizado para definir controles adicionais, deverá fornecer um procedimento de gancho para processar a entrada para seus controles.
Para habilitar um procedimento de gancho para uma caixa de diálogo Localizar ou Substituir
- Defina o sinalizador FR_ENABLEHOOK no membro Flags da estrutura FINDREPLACE .
- Especifique o endereço do procedimento de gancho no membro lpfnHook .
Depois de processar sua mensagem de WM_INITDIALOG , o procedimento da caixa de diálogo envia uma mensagem WM_INITDIALOG para o procedimento de gancho. O parâmetro lParam dessa mensagem é um ponteiro para a estrutura FINDREPLACE usada para inicializar a caixa de diálogo.
Se o procedimento de gancho retornar FALSE em resposta à mensagem WM_INITDIALOG , a caixa de diálogo não será mostrada, a menos que o procedimento de gancho o exiba. Para fazer isso, primeiro execute qualquer outra operação de pintura e, em seguida, chame as funções ShowWindow e UpdateWindow . O código a seguir mostra um exemplo:
// 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);