Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Анализ программного кода начнем с рассмотрения процесса создания элементов
управления. Все ОНИ СОЗДаЮТСЯ При ПОМОЩИ фуНКЦИИ CreateWindowEx
по схожему сценарию, поэтому достаточно подробно остановиться на только
одном элементе, например кнопке. Кнопка создается при выполнении следующего
фрагмента кода:
invoke CreateWindowEx, NULL, ADDR ButtonClassName, ADDR ButtonText,\
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
140, 95, 130, 25, hWin, ButtonID, hlnstance, NULL
mov hwndButton, EAX
Среди параметров вызова функции следует выделить:
• ADDR ButtonClassName — указатель на строку с именем класса (Button);
• WSCHILD — информирует о том, что создаваемое окно является дочерним;
• HWin — дескриптор родительского окна;
• ButtonID — идентификатор элемента управления.
Дескриптор вновь созданного окна сохраняем в переменной hwndButton.
При нажатии на кнопку приложению посылается сообщение WMCOMMAND.
Оконная процедура анализирует это сообщение, как показано в следующем
фрагменте программного кода:
cmp uMsg, WM_COMMAND
j ne next_2
mov EAX,wParam
cmp lParam, 0
j e ex_wmcom
cmp AX, ButtonID
jne ex_wmcom
shr EAX, 16
cmp AX, BN_CLICKED
jne ex_wmcom
invoke GetWindowText, hwndEditl, ADDR buffer, 512
mov bytesWritten, EAX
call ReplaceSpace
invoke SetWindowText, hwndEdit2, ADDR buffer
ex_wmcom:
ret
Вначале анализируем, содержит ли параметр lParam значение, отличное
от 0. Если да, то сообщение инициировано элементом управления, и мы
идем дальше. Значение lParam, равное 0, говорит о том, что сообщение вызвано,
например, выбором пункта меню, что нас не интересует.
mov ЕАХ,wParam
cmp lParam, 0
j e ex_wmcom
Предположим, что сообщение вызвано элементом управления, т. е. переменная
lParam отлична от 0. Дальше необходимо определить, кнопка ли
это. Здесь нам пригодится идентификатор кнопки ButtoniD, определенный
ранее:
ButtoniD EQU 1
Вспомним, что в регистре ЕАХ К этому моменту находится значение wParam,
причем регистр АХ содержит идентификатор элемента управления (lParam
не равен 0). Следующий фрагмент кода определяет, является ли элемент
управления кнопкой и, если да, то была ли кнопка нажата (BNCLICKED):
cmp АХ, ButtoniD
jne ex_wmcom ; нет, это не кнопка.Выходим из обработчика
shr ЕАХ, 16 ; если это кнопка, то сдвигаем старшие биты
; в АХ для последующего анализа
cmp АХ, BN_CLICKED
jne ex_wmcom ; если кнопка нажата, обрабатываем нажатие
invoke
mov
call
GetWindowText, hwndEditl, ADDR buffer, 512
bytesWritten, EAX
ReplaceSpace
invoke SetWindowText, hwndEdit2, ADDR buffer
ex_wmcom:
ret
Текст из поля редактирования с дескриптором hwndEditi копируется в буфер
с максимальным размером в 512 байт при помощи функции WIN API
GetwindowText. В качестве результата функция возвращает количество байт,
фактически скопированных в буфер. Это значение сохраняется в переменной
byteswritten. Далее вызываем процедуру ReplaceSpace, которая использует
адрес буфера и число скопированных байт в качестве параметров.
После преобразования текст выводится из буфера памяти в окно второго
поля редактирования (дескриптор hwndEdit2).
5.9. Диалоговые окна и их использование
Диалоговое окно во многом напоминает обычное выпадающее окно Windows.
Основное различие между ними состоит в том, что в диалоговых окнах применяются
шаблоны, определяющие элементы управления, создаваемые в
них. Все такие шаблоны определяются в файле описания ресурса для типа
DIALOGEX. Можно сказать и так: диалоговое окно — это обычное окно
Windows, которое разработано с дочерними окнами (элементами управления)
для дальнейшего использования. Кроме того, операционная система
снабжает диалоговое окно возможностями обработки клавиатурного ввода,
например нажатий клавиш сдвига, <Таb> и , чего нет в обычном
окне.
<< Назад В начало Далее >> |
|