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 и регистра ввода.


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