Поиск текста

В этом разделе описывается пример кода, который отображает и управляет диалоговое окно найти , так что пользователь может указать параметры операции поиска. Диалогового окна отправляет сообщения на процедуре окна, так что можно выполнять операции поиска.

Код для отображения и управления диалоговое окно заменить аналогично, за исключением того, что он использует функцию ReplaceText для отображения диалогового окна. Диалоговое окно заменить также отправляет сообщения в ответ на щелчок пользователя на кнопки заменить и Заменить все.

Чтобы использовать диалоговое окно Поиск и Замена , необходимо выполнить три отдельных задач:

  1. Получить идентификатор сообщения для зарегистрированных сообщений FINDMSGSTRING.
  2. Отображение диалогового окна.
  3. Процесс FINDMSGSTRING сообщений когда диалогового окна Открыть.

При инициализации приложения, необходимо вызовите функцию RegisterWindowMessage для того чтобы получить идентификатор сообщения для зарегистрированного сообщения FINDMSGSTRING.

UINT uFindReplaceMsg;  / / сообщение идентификатор для FINDMSGSTRING uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING) 

Чтобы отобразить диалоговое окно найти , сначала инициализации структуры FINDREPLACE и затем вызвать функцию FindText . Обратите внимание, что FINDREPLACE структура и буфер для строки поиска должно быть глобальной или статической переменной, так что он не выйдут из области видимости до закрытия диалогового окна. Необходимо задать элемент hwndOwner для указания окна, которое получает зарегистрированные сообщения. После создания диалогового окна, можно переместить или управлять им с помощью возвращенных ручки.

FINDREPLACE fr;       / / общее диалоговое окно поле структуры
HWND hwnd;            / / окно-владелец
SzFindWhat CHAR [80];  / / буфера приема строки
HWND hdlg = NULL;     / / обработать диалогового окна поиска

/ / Инициализировать FINDREPLACE
ZeroMemory (amp; пт, sizeof(FINDREPLACE));
FR.lStructSize = sizeof(FINDREPLACE);
FR.hwndOwner = hwnd;
FR.lpstrFindWhat = szFindWhat;
FR.wFindWhatLen = 80;
фр.Флаги = 0;

hDlg = FindText (& fr) 

Когда диалоговое окно открыто, ваш основной цикл обработки сообщений должна включать вызов функции IsDialogMessage . В качестве параметра в вызове IsDialogMessage передайте дескриптор диалогового окна. Это гарантирует, что диалогового окна правильно обрабатывает сообщения клавиатуры.

Для мониторинга сообщений, отправленных из диалогового окна, процедуре окна должны проверить зарегистрированные сообщения FINDMSGSTRING и обрабатывать значения, переданные в структуре FINDREPLACE , как показано в следующем примере:

 Переобучение LPFINDREPLACE;

Если (сообщение == uFindReplaceMsg) {/ / получить указатель к структуре FINDREPLACE от lParam.

переобучение = lParam (LPFINDREPLACE);

/ / Если установлен флаг FR_DIALOGTERM, / / аннулировать ручку, выявления диалогового окна. 

    Если (переобучение gt;Флаги и FR_DIALOGTERM) {hdlg = NULL; 
        Возвращает 0; 
        } / / Если установлен флаг FR_FINDNEXT, / / вызывать процедуру поиска, определяемые приложением
    / / для поиска запрашиваемой строки. 

    Если (переобучение - > FR_FINDNEXT и флаги) SearchFile (переобучение - > lpstrFindWhat,
                   (BOOL) (переобучение - > флаги и FR_DOWN), (BOOL) (переобучение - > FR_MATCHCASE и флаги)); 

    Возвращает 0; 
 
} 
 

Index