Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Include windows.inc




Model large, WINDOWS PASCAL

Jumps

Locals

Jmp defwndproc

Je wmpaint

Je wmrbuttondown

Je wmcreate

Je wmlbuttondown

Je wmdestroy

WndProc PROC

Mov ah, 4Ch

Jmp msg_loop

Call DISPATCHMESSAGE, ds offset msg

Call TRANSLATEMESSAGE, ds offset msg

Je end_loop

Cmp ax, 0

; Обрабатываем сообщение

; Обрабатываем следующее сообщение

end_loop:

; Выходим из программы

mov ax, [msg.msWPARAM]

int 21h


Этот кусок кода должен начать работать стразу после создания главного окна. Он отвечает за получение, перевод и передачу сообщения вашему окну. Если этот обработчик получает сообщение WM_QUIT, то он завершает работу программы. Этот участок вашей программы только передает сообщения вашему окну, но не обрабатывает их, для этого существует функция WndProc, адрес которой мы передали при заполнении структуры WNDCLASS. Именно эта функция разбирает по кусочкам сообщения и передает работу вашим обработчикам.


ARG hwnd:WORD, wmsg:WORD, wparam:WORD, lparam:DWORD

 

cmp [wmsg], WM_DESTROY

; Если получили сообщение WM_DESTROY (получено сообщение "на выход")

cmp [wmsg], WM_LBUTTONDOWN

; Если получили сообщение WM_LBUTTONDOWN (нажата левая кнопка мыши)

cmp [wmsg], WM_CREATE

; Если получили сообщение WM_CREATE (получено сообщение "создать окно")

cmp [wmsg], WM_RBUTTONDOWN

; Если получили сообщение WM_RBUTTONDOWN (нажата правая кнопка мыши)

cmp [wmsg], WM_PAINT

; Если получили сообщение WM_PAINT (получено сообщение "нарисуйся")

; Если мы не обрабатываем ни одно из вышеперечисленных сообщений передаем

; управление стандартному обработчику


 

Процедура обработки сообщения должна обнулять регистровую пару DX:AX перед выходом из обработчика. Эти регистры используется Windows для получения результатов вызова обработчика.

Если переданное сообщение не обрабатывается обработчиком, обязательно нужно передать управление стандартному обработчику. Для того, чтобы это сделать, нужно вызвать функция DEFWINDOWPROC, передав ей в параметрах: идентификатор окна, идентификатор сообщения и параметры.

Теперь когда, все рассказано и показано, приведем пример рабочей программы.

Файл window.asm


; Подключаем файл описания констант и структур API

; Описываем используемые функции

extrn BEGINPAINT:PROC

extrn CREATEWINDOW:PROC

extrn DEFWINDOWPROC:PROC

extrn DISPATCHMESSAGE:PROC

extrn ENDPAINT:PROC

extrn GETMESSAGE:PROC

extrn GETSTOCKOBJECT:PROC

extrn INITAPP:PROC

extrn INITTASK:PROC

extrn LOADCURSOR:PROC

extrn MESSAGEBOX:PROC

extrn POSTQUITMESSAGE:PROC

extrn REGISTERCLASS:PROC

extrn SHOWWINDOW:PROC

extrn TEXTOUT:PROC

extrn TRANSLATEMESSAGE:PROC

extrn UPDATEWINDOW:PROC

extrn WAITEVENT:PROC

 




Поделиться с друзьями:


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


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



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




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