InitStr(HWND.<cTpoKa приема пароля>.<размер строки>.<символ-заполнитель>) По завершении ввода данных функция извещает об этом приложение при помощи сообщения WM_C0MMAND. Такая библиотека находится в одном адресном пространстве с основной программой, но не использует глобальные переменные. Для имитации описанного взаимодействия ввод строки реализован в отдельном модуле ReadStr.cpp, а буфер static char PassWord[7], предназначенный для получения введенного пароля, объявлен статическим и помещен в другом модуле.

Ввод пароля в строку char PassWord[7] организуется довольно просто. По щелчку левой кнопкой мыши в оконной процедуре приложения вызывается функция запуска ввода пароля, как это показано в листинге 6.2.

Листинг 6.2

case WM_LBUTT0ND0WN:

InitStrChWnd.Password.6.'*'): //это ввод пароля из 6 символов return 0; Эта функция записывает в статические переменные char* Str и i nt sMax модуля ReadStr.cpp адрес и размер буфера Password, полученные в качестве параметров.

Ввод строки пароля в дочернем окне После этого функция создает дочернее окно и переводит на него фокус ввода, как показано в листинге 6.3.

Листинг 6.3

void InitStr(HWND hWnd.char *s.int Max.char Sy-'*') {

Str~s; //Записываются адрес и длина строки sMax-Max;

for (int k-0; k<21;k++) Sym[k] - Sy; //Запись в Sym символов-заполнителей. Sym[k]=0;

//В строку записан только 21 символ. Мы будем считать, что. если пользователь //пытается вводить такой нереально длинный пароль, окно следует уничтожить //и прекратить ввод, не дожидаясь нажатия клавиши Enter. CreateChildChWnd.);

//Создается дочернее окно и на него переводится фокус ввода }

После этого ввод с клавиатуры поступает не в основное, а в дочернее окно. Оконная функция дочернего окна ChldWndProc() при помощи сообщений WM_CHAR получает вводимые символы и выполняет их обработку. Функция записывает символы в буфер Password при помощи указателя Str, поскольку имя Password находится вне области видимости модуля ReadStr.cpp.

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


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