static char TruePassWord[] - "Пароль"; Правильный пароль static char PassWord[7]; Введенный пользователем пароль void OnChldCHWND hWnd.UINT message.int Length,LPARAM lParam) {
i f(strcmp(Password.TruePassWord)11Length) MessageBox(hWnd.
"Надо вспомнить правильный пароль"."Скажи \"Пароль\"",0); else MessageBoxChWnd. "Пароль принят"."",0); }
LRESULT API ENTRY InputWndProc (HWND hWnd.
UINT message.WPARAM wParam.LPARAM lParam)
{
switch (message) {
case WM_DESTR0Y: PostQuitMessage(O); break; case WMJ.BUTT0ND0WN:
InitStr(hWnd.Password.6.'*'); //Это ввод пароля из 6 символов.
return 0; case WM_C0MMAND:
if (LOWORD(wParam)--NumC) _ 0nChld( hWnd. message. HIWORD(wParam).lParam); "~ else 0nMenu(hWnd. message. wParam. lParam); return 0;
}
return DefWindowProc(hWnd.message.wParam.1Param); }
В данном примере для разделения меню и сообщений от дочернего окна используется тот факт, что идентификаторы команд меню начинаются с числа 40 000 и не совпадают с идентификатором окна.
Все действия по вводу строки реализованы в отдельном модуле ReadStr.cpp, код которого приведен в листинге 6.7.
Листинг 6.7
#include <windows.h> #include <stdio.h>
Ввод строки пароля в дочернем окне
#include "Mam.h"
#include "Resource.h"
static char *Str - NULL; // Адрес
static int sMax; //и длина строки, полученные функцией InitStrO.
static int i; //Количество введенных символов.
static char Sym[80]; // Эта строка содержит символы-заполнители.
HWND Chid; //Дескриптор дочернего окна, принимающего символы
BOOL CreateChild(HWND hWnd); //Прототип функции
void InitStr(HwM) hWnd.char *s.int Max.char Sy -'*')
{
Str - s: sMax - Max; for (int k-0: k<21;k++)Sym[k] - Sy;
Sym[k] - 0;
CreateChildChwnd.);
}
В процессе ввода строки нажатие каждой клавиши будет порождать поступление сообщения WM_CHAR с кодом нажатой клавиши в младшем слове поля wParam в оконную процедуру ChldWndProc() дочернего окна, код которой приведен в листинге 6.8. Получать код клавиши можно и по сообщению WM_KEYD0WN, но его неудобно использовать для ввода текстовых строк из-за определенных особенностей этого сообщения. В нем код закреплен за каждой клавишей, включая функциональные клавиши. Более того, за каждой клавишей закреплен только один код, не зависящий от состояния клавиши Schift и регистра ввода.