InitStr(HWND hWnd. char *s.int Max. void (*Func)( char *s))

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

Дочерние окна

родительскому окну сообщение WM_COMMAND, а в младшем слове поля wParam этого сообщения записывать идентификатор дочернего окна. Редактор ресурсов среды Visual С++, начиная с числа 100, нумерует ресурсы, а начиная с 1000 - дочерние окна стандартных классов. Команды меню нумеруются с 40 000, видимо, для того чтобы отличать их от идентификаторов дочерних окон. При помощи сообщения WM_C0MMAND родительское окно можно извещать о различных событиях, возникающих при вводе пользователем данных. Если событий возникает несколько (например, ввод очередного символа и завершение строки), то код извещения о типе события можно занести в старшее слово wParam.

Дочерние окна новых классов передают родительскому окну вместо WM_C0MMAND сообщение WM_N0TIFY. При этом в lParam передается указатель на структуру типа NMHDR. Поля структуры содержат дескриптор дочернего окна, его идентификатор и код извещения. Такой способ более универсален, потому что, фактически, дочернее окно может передать родительскому вместо NMHDR любую структуру данных, главное, чтобы можно было использовать указатель.

В некоторых ситуациях, например при вводе пароля, имеет смысл заблокировать передачу фокуса основному окну до завершения ввода строки, а в процессе ввода отображать вместо вводимых символов один символ-заменитель.

Можно продемонстрировать ввод строки через дочернее окно на примере запроса пароля. Для этого достаточно перенести без изменения из проекта MenuModif в папку ChildWindow файлы Main.cpp, Init.cpp и MenuModif.rc. В файл Resource.h нужно добавить идентификатор NumC дочернего окна, создаваемого для ввода строки. Из файла 0nMenu() нужно удалить обработку пунктов меню. Из-за того что больших изменений вносить не приходится, код этих модулей здесь не приводится.

Чтобы ввод пароля могли использовать различные приложения, все действия, реализующие ввод и отображение строки, следует реализовать в отдельной DLL-библиотеке, которая организует ввод строки при помощи библиотечной функции InitStr(), примерный синтаксис которой приведен ниже:


⇐ Предыдущая| |Следующая ⇒