КАТЕГОРИИ: Архитектура-(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; Просмотров: 473; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |