Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

После того, как дочернее окно было создано, оно может посылать сообщение 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) Дочерние окна новых классов передают родительскому окну вместо WM_COMMAND сообщение WM_NOTIFY. При этом в lParam передается указатель на структуру типа NMHDR. Поля структуры содержат дескриптор дочернего окна, его идентификатор и код извещения.

 

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

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

 

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

 

case WM_LBUTTONDOWN:

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

break;

 

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

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

 

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

 

 

//windef.h
#define WINAPI __stdcall
#define APIENTRY WINAPI

 

 


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

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(ChWnd);

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


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

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

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

 

<== предыдущая лекция | следующая лекция ==>
BOOL InvalidateRect | Другие функции поддержки окон
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 382; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.