После того, как дочернее окно было создано, оно может посылать сообщение WM_COMMAND, уведомляющие pодительское окно об изменении своего состояния

Ввод строки пароля в дочернем окне

При уничтожении дочернего окна функцией DestroyWindow() родительскому окну тоже передается сообщение WM_DESTROY.

Синтаксис

Сообщение WM_PARENTNOTIFY посылается дочерним окном родительскому окну при его создании или разрушении, а также при нажатии в нем кнопки мыши, в то время как курсор находится над дочерним окном.

При уничтожении родительского окна сообщение WM_DESTROY также рассылается всем дочерним окнам.

9) Для передачи сигналов от дочернего окна родительскому используется сообщение WM_PARENTNOTIFY, передаваемое в оконную процедуру родительского окна при создании и закрытии дочернего окна, а также при щелчках мыши в дочернем окне.

WM_PARENTNOTIFY:

fwEvent = LOWORD(wParam); // флаг события idChild = HIWORD(wParam); // идентификатор дочернего окна lValue = lParam; // дескриптор дочернего окна, или координаты курсора

Параметры:

fwEvent Определяет событие, о котором уведомляется родитель. Этот параметр может быть одним из следующих значений:
Значение: Описание:
WM_CREATE Создание дочернего окна.
WM_DESTROY Уничтожение дочернего окна.
WM_LBUTTONDOWN Нажатие левой кнопки мыши.
WM_MBUTTONDOWN Нажатие средней кнопки мыши.
WM_RBUTTONDOWN Нажатие правой кнопки мыши.
   
idChild Если параметр fwEvent равен WM_CREATE или WM_DESTROY, то idChild определяет идентификатор дочернего окна. В других случаях, idChild не определен.
lValue Содержит дескриптор дочернего окна (полученный в LOWORD(lParam)), если параметр fwEvent равен WM_CREATE или WM_DESTROY; в других случаях, lValue содержит x- и y-координаты курсора. x-координата находится в младшем слове, а y-координата находится в старшем слове.

В программе для Windows ввод строки может состоять из трех этапов.

1) На первом этапе создаётся главное окно приложения, устанавливаются начальные значения рабочих переменных, обозначается на экране место для отображения вводимой строки и осуществляется иная подготовительная работа.

2) На втором этапе создается дочернее окно. Его оконная процедура принимает символы по мере их поступления и заносит в строку.

3) На третьем этапе процесс извещается о получении строки. Для реализации этого этапа можно создать функцию InitStr().

Параметр Описание
LOWORD (wParam) Идентификатор дочернего окна
HIWORD (wParam) Код уведомления
lParam Описатель дочернего окна

Поэтому, после создания дочеpних окон, pодительское окно должно обрабатывать сообщения WM_COMMAND, чтобы быть способным получать коды уведомления от дочеpних окон.


5 ) Ввод пароля можно организовать при помощи функции InitStr(), примерный синтаксис которой приведен ниже:

InitStr(HWND,<строка приёма пароля>,<размер строки>,<символ-заполнитель>)

6) Ввод пароля в строку char PassWord[7] организуется по щелчку левой кнопкой мыши в главном окне. В оконной процедуре главного окна WndProc вызывается функция запуска ввода пароля.

case WM_LBUTTONDOWN:

InitStr(hWnd, PassWord, 8, '*');

break;

7) В программе функция InitStr() объявлена следующим образом:

void InitStr(HWND hWnd, char *s, int Max, char Sy);

Эта функция записывает в статические переменные char* S и int Max адрес и размер буфера Password, полученные в качестве параметров.


8 ) После этого функция создает дочернее окно и переводит на него фокус ввода:

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.

CreateChild(hWnd.);

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


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

При окончании ввода пароля, активизируется кнопка Enter. Таким образом, при получении символьного кода виртуальной клавиши Enter или при вводе пароля, который состоит более чем из 21-го символа в оконной процедуре дочернего окна ChldWndProc() вызывается функция PostMessage(), которая пересылает в родительское окно сообщение WM_COMMAND, извещающее о завершении ввода.

Общее количество введенных символов подсчитывается в переменной i. Если оно равно длине пароля, то в поле HIWORD(wParam) сообщения WM_CОMMAND записывается ноль, в противном случае в HIWORD(wParam) формируется ненулевой код извещения.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: