Localização de texto

Este tópico descreve codificar exemplo que exibe e gerencia uma caixa de diálogo Localizar para que o usuário pode especificar os parâmetros de uma operação de pesquisa. A caixa de diálogo envia mensagens para seu procedimento de janela para que você pode executar a operação de pesquisa.

O código para exibir e gerenciar uma caixa de diálogo Substituir é semelhante, exceto que ele usa a função ReplaceText para exibir a caixa de diálogo. A caixa de diálogo Substituir também envia mensagens em resposta a cliques de usuário nos botões Substituir e Substituir tudo.

Para usar a caixa de diálogo Localizar ou Substituir , você deve executar três tarefas separadas:

  1. Obter um identificador de mensagem para a mensagem registrada FINDMSGSTRING.
  2. Exibir a caixa de diálogo.
  3. Processo FINDMSGSTRING mensagens quando a caixa de diálogo é abrir.

Quando você inicializa o aplicativo, chamar o RegisterWindowMessage função para obter um identificador de mensagem para a mensagem registrada FINDMSGSTRING.

UINT uFindReplaceMsg;  / / mensagem identificador para FINDMSGSTRING uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING) 

Para exibir uma caixa de diálogo Localizar , primeiro inicializar uma estrutura FINDREPLACE e, em seguida, chamar a função FindText . Observe que a estrutura FINDREPLACE e o buffer para a Cadeia de caracteres de pesquisa devem ser uma variável global ou estática para não ficar fora do escopo antes que a caixa de diálogo é fechada. Você deve definir o membro de hwndOwner para especificar a janela que recebe as mensagens registadas. Depois de criar a caixa de diálogo, você pode mover ou manipulá-lo usando o identificador retornado.

FINDREPLACE fr;       / / estrutura de caixa de diálogo comum
HWND hwnd;            / / janela do proprietário
CHAR szFindWhat [80];  / / buffer de Cadeia de caracteres de recebimento
HWND hdlg = NULL;     / / identificador da caixa de diálogo Localizar

/ / Inicializar FINDREPLACE
ZeroMemory (amp; fr, sizeof(FINDREPLACE));
FR.lStructSize = sizeof(FINDREPLACE);
FR.hwndOwner = hwnd;
FR.lpstrFindWhat = szFindWhat;
FR.wFindWhatLen = 80;
FR.Sinalizadores = 0;

hDlg = FindText (& fr) 

Quando a caixa de diálogo é aberta, o loop de mensagem principal deve incluir um chamar para o IsDialogMessage função. Passe o identificador de janela da caixa de diálogo como um parâmetro na chamar IsDialogMessage . Isso garante que a caixa de diálogo processa correctamente mensagens de teclado.

Para monitorar as mensagens enviadas da caixa de diálogo, seu procedimento janela deve verificar a mensagem registrada FINDMSGSTRING e processar os valores passados a estrutura FINDREPLACE como no exemplo a seguir:

Lpfr LPFINDREPLACE;

se (mensagem = = uFindReplaceMsg) {/ / Get a ponteiro para a estrutura FINDREPLACE de lParam.

LPFR = lParam (LPFINDREPLACE);

/ / Se o sinalizador FR_DIALOGTERM é definida, / / invalida o identificador que identifica a caixa de diálogo. 

    se (lpfr-gt;Sinalizadores & FR_DIALOGTERM) {hdlg = NULL; 
        return 0; 
        } / / Se o sinalizador FR_FINDNEXT é definida, / / a rotina de pesquisa definido pelo aplicativo de chamada
    / / para procurar a Cadeia de caracteres solicitada. 

    se (lpfr - > sinalizadores & FR_FINDNEXT) SearchFile (lpfr - > lpstrFindWhat,
                   (BOOL) (lpfr - > sinalizadores & FR_DOWN), (BOOL) (lpfr - > sinalizadores & FR_MATCHCASE)); 

    return 0; 
 
} 

 

Index