КАТЕГОРИИ: Архитектура-(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; // дескриптор дочернего окна, или координаты курсораПараметры:
В программе для Windows ввод строки может состоять из трех этапов. 1) На первом этапе создаётся главное окно приложения, устанавливаются начальные значения рабочих переменных, обозначается на экране место для отображения вводимой строки и осуществляется иная подготовительная работа. 2) На втором этапе создается дочернее окно. Его оконная процедура принимает символы по мере их поступления и заносит в строку. 3) На третьем этапе процесс извещается о получении строки. Для реализации этого этапа можно создать функцию InitStr().
Поэтому, после создания доче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, полученные в качестве параметров.
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) формируется ненулевой код извещения.
Дата добавления: 2014-01-07; Просмотров: 382; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |