После нажатия клавиши Enter или если пользователь ввел более 20 символов, дочернее окно уничтожает само себя, предварительно послав основному окну приложения сообщение WM_C0MMAND, извещающее о завершении ввода.

После того как количество введенных символов достигнет значения sMax, можно уничтожить дочернее окно и передать родительскому окну сообщение WM_C0MMAND. Но это уже может быть подсказкой для злонамеренного пользователя, подбирающего пароль. Это позволило бы ему узнать длину пароля. Поэтому ввод продолжается до нажатия клавиши Enter, но все символы, поступившие после превышения длины пароля, не записываются в строку PassWord[]. Общее количество введенных символов подсчитывается в переменной i. Если оно равно длине пароля, то в поле HIWORD(wParam) сообщения WM_C0MMAND записывается ноль, в противном случае в HIWORD(wParam) формируется ненулевой код извещения.

Наконец, основное окно получает сообщение WM_C0MMAND, по значению идентификатора в LOWORD(wParam) определяет, что оно пришло не от меню, а от дочернего окна, и вызывает функцию обработки пароля OnChildO, передавая ей вторым параметром код извещения. Соответствующий фрагмент кода приведен в листинге 6.4.

Листинг 6.4

case WM_C0MMAND:
if (LOWORD(wParam)-NumC)

OnChldC hWnd. message. HlWORD(wParam).IParam); //Обработка пароля, else OnMenuChWnd. message. wParam. IParam): //Обработка меню return 0; Код функции обработки пароля приведен в листинге 6.5.

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

Листинг 6.5

void OnChldCHWND hWnd.UINT message.int Length.LPARAM lParam) {
if(strcmp(PassWord.TruePassWord)||Length)

MessageBox(hWnd."Надо вспомнить правильный пароль"."Скажи \"Пароль\"".0); else MessapeBoxfbWnd. " Пароль принят","",0);

}

На основе сравнения строк и проверки длины введенного пароля функция принимает решение о приеме пароля и отображает соответствующее сообщение при помощи функции MessageBox().

Полный текст модуля, содержащего оконную процедуру основного окна, приведен в листинге 6.6.

Листинг 6.6

#include <windows.h> #include "Main.h" #include "Resource.h"

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