|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Finding Text
This topic describes sample code that displays and manages a Find dialog box so the user can specify the parameters of a search operation. The dialog box sends messages to your window procedure so you can perform the search operation.
The code for displaying and managing a Replace dialog box is similar, except that it uses the ReplaceText function to display the dialog box. The Replace dialog box also sends messages in response to user clicks on the Replace and Replace All buttons. To use the Find or Replace dialog box, you must perform three separate tasks:
1. Get a message identifier for the FINDMSGSTRING registered message. 2. Display the dialog box. 3. Process FINDMSGSTRING messages when the dialog box is open.
When you initialize your application, call the RegisterWindowMessage function to get a message identifier for the FINDMSGSTRING registered message.
UINT uFindReplaceMsg; // message identifier for FINDMSGSTRING
uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);
To display a Find dialog box, first initialize a FINDREPLACE structure and then call the FindText function. Note that the FINDREPLACE structure and the buffer for the search string should be a global or static variable so it does not go out of scope before the dialog box closes. You must set the hwndOwner member to specify the window that receives the registered messages. After you create the dialog box, you can move or manipulate it by using the returned handle.
FINDREPLACE fr; // common dialog box structure HWND hwnd; // owner window CHAR szFindWhat[80]; // buffer receiving string HWND hdlg = NULL; // handle of Find dialog box // Initialize FINDREPLACE ZeroMemory(&fr, sizeof(FINDREPLACE)); fr.lStructSize = sizeof(FINDREPLACE); fr.hwndOwner = hwnd; fr.lpstrFindWhat = szFindWhat; fr.wFindWhatLen = 80; fr.Flags = 0;
hdlg = FindText(&fr);
When the dialog box is open, your main message loop must include a call to the IsDialogMessage function. Pass the window handle of the dialog box as a parameter in the IsDialogMessage call. This ensures that the dialog box correctly processes keyboard messages. To monitor messages sent from the dialog box, your window procedure must check for the FINDMSGSTRING registered message and process the values passed in the FINDREPLACE structure as in the following example:
LPFINDREPLACE lpfr; if (message == uFindReplaceMsg){
// Get pointer to FINDREPLACE structure from lParam.
lpfr = (LPFINDREPLACE)lParam;
// If the FR_DIALOGTERM flag is set, // invalidate the handle identifying the dialog box.
if (lpfr->Flags & FR_DIALOGTERM){ hdlg = NULL; return 0; }
// If the FR_FINDNEXT flag is set, // call the application-defined search routine // to search for the requested string.
if (lpfr->Flags & FR_FINDNEXT) SearchFile(lpfr->lpstrFindWhat, (BOOL) (lpfr->Flags & FR_DOWN), (BOOL) (lpfr->Flags & FR_MATCHCASE));
return 0; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Обнаружение Текста
Эта тема описывает код образца, который отображает и управляет диалоговым ящиком Find, так что потребитель может определить параметры действия поиска. Диалоговый ящик посылает сообщения в вашу процедуру окна, так что Вы можете выполнить действие поиска.
Код для отображения и управляя диалоговым ящиком Replace аналогичное, за исключением того это это использует функцию ReplaceText, чтобы отображать диалоговый ящик. Диалоговый ящик Replace также посылает сообщения в ответ на щелчки потребителя на Replace и Заменяет Все кнопки. Чтобы использовать Find или Заменять диалоговый ящик, Вы должны выполнить три отдельных задачи:
1. Получите идентификатор сообщения для FINDMSGSTRING зарегистрировавшее сообщение. 2. Отобразите диалоговый ящик. 3. Сообщения Процесса FINDMSGSTRING когда диалоговый ящик открытый.
Когда Вы инициализируете ваше приложение, вызовите функцию RegisterWindowMessage, чтобы получать идентификатор сообщения для FINDMSGSTRING зарегистрировавшее сообщение.
UINT uFindReplaceMsg; // идентификатор сообщения для FINDMSGSTRING
uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);
Для того, чтобы отображать диалоговый ящик Find, сначала инициализировать структуру FINDREPLACE затем вызывать функцию FindText. Отметьте, что структура FINDREPLACE и буфер для строки поиска должны быть глобальная или статическая переменная, так что это не выходит из области прежде, чем диалоговый ящик закроется. Вы должны установить член hwndOwner, чтобы определять окно, которое получает зарегистрированные сообщения. После того, как Вы создадите диалоговый ящик, Вы можете переместить или манипулировать это используя возвращанную ручку.
fr FINDREPLACE; // общая диалоговая структура ящика HWND hwnd; // окно владельца CHAR szFindWhat[80]; // буфер, получающий строку HWND hdlg = НЕДЕЙСТВИТЕЛЬНЫЙ; // ручка Находить диалоговый ящик // Инициализируйте FINDREPLACE ZeroMemory(&fr, sizeof(FINDREPLACE)); fr.lStructSize = sizeof(FINDREPLACE); fr.hwndOwner = hwnd; fr.lpstrFindWhat = szFindWhat; fr.wFindWhatLen = 80; fr.Флаги = 0;
hdlg = FindText(&fr);
Когда диалоговый ящик открытый, ваш основной цикл сообщения должен включить вызов в функцию IsDialogMessage. Передайте ручку окна диалогового ящика как параметр на вызове IsDialogMessage. Это проверяет, что диалоговый ящик правильно обрабатывает клавишные сообщения. Для того, чтобы проверять сообщения посланные из диалогового ящика, ваша процедура окна должна проверить на наличие FINDMSGSTRING зарегистрировавшее сообщение и обрабатывать величины пройденные в структуру FINDREPLACE как в следующем примере:
LPFINDREPLACE lpfr; если (сообщение == uFindReplaceMsg){
// Получите указатель в структуру FINDREPLACE из lParam.
lpfr = (LPFINDREPLACE)lParam;
// Если флаг FR_DIALOGTERM установлен, // аннулировать ручку, опознающую диалоговый ящик.
если (lpfr->Flags & FR_DIALOGTERM){ hdlg = НЕДЕЙСТВИТЕЛЬНЫЙ; возврат 0; }
// Если флаг FR_FINDNEXT установлен, // вызов определенная прикладная программа / поиск/, чтобы искать попрошенную строку.
если (lpfr->Flags & FR_FINDNEXT) SearchFile(lpfr->lpstrFindWhat, (BOOL) (lpfr->Flags & FR_DOWN), (BOOL) (lpfr->Flags & FR_MATCHCASE));
возврат 0; }
|
|
|
|
| |