close

Вход

Забыли?

вход по аккаунту

?

ЛР14 Обробка пов домлень в д клав атури та мишки

код для вставкиСкачать
 Міністерство освіти і науки України
Національний технічний університет "Харківський політехнічний інститут"
Кафедра "Обчислювальна техніка та програмування"
Звіт з лабораторної роботи №14
з теми "Обробка повідомлень від клавіатури та мишки"
з дисципліни "Системне програмування"
Виконав:
студент групи КІТ-31
Чухлатий Ю.А.
Перевірив:
Главчев М.I.
Харків 2012 Лабораторна робота №14: "Обробка повідомлень від клавіатури та мишки"
Мета заняття: - поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;
- придбати практичні навички обробки повідомлень від клавіатури та мишки, написаних мовою асемблеру з використанням АРІ-функцій під Win32.
Постановка задачі
Написати програму обробки повідомлень від клавіатури та мишки з відображенням іконки вікна, пунктів меню й з виконанням завдання згідно з останньою цифрою номера студента в навчальній групі. Відобразити у вікні свою фамілію та назву своєї навчальної групи. Завдання Робота з клавіатурою
7. Використати функцію RegisterHotKey визначення "гарячої" клавіші.
Лістинг :
.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ;завдання лінійної моделі пам'яті та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
include \masm32\include\windows.inc ; файли структур, констант ...
include \masm32\macros\macros.asm
uselib user32,kernel32,gdi32
WinMain proto :DWORD,:DWORD
.data hmsg db "Горяча клавиша CTRL + ALT + A працюэ",0
hcap db "Чухлатый Юрий КИТ-31",0 ; директива визначення даних
ClassName db "SimpleWinClass",0
AppName db "Обробка повідомлень від КЛАВІАТУРИ",0 ; назва вікна
char WPARAM 20h ; символ пропуску, який програма отримує від клавіатури
.data?
hInstance HINSTANCE ?
.code ; директива початку сегмента команд
start: ; мітка початку програми з ім'ям start
invoke GetModuleHandle, NULL ; отримання дескриптора програми
mov hInstance,eax ; збереження дескриптора програми
invoke WinMain, hInstance, SW_SHOWDEFAULT
invoke ExitProcess,eax ; повернення керування ОС Windows та вивільнення ресурсів
WinMain proc hInst:HINSTANCE, CmdShow:DWORD
LOCAL wc:WNDCLASSEX ; резервування стека під структуру
LOCAL msg:MSG ; резервування стека під структуру MSG LOCAL hwnd:HWND ; резервування стека під хендл програми
push hInst ; збереження в стеку дескриптора програми
pop wc.hInstance ; повернення дескриптора в поле структури
mov wc.cbSize,SIZEOF WNDCLASSEX ; кількість байтів структури
mov wc.style, CS_HREDRAW or CS_VREDRAW ; стиль та поведінка вікна
mov wc.lpfnWndProc, OFFSET WndProc ; адреса процедури WndProc
mov wc.hbrBackground,COLOR_WINDOW+1 ; колір вікна
mov wc.lpszMenuName,NULL ; ім'я ресурсу меню
mov wc.lpszClassName,OFFSET ClassName ; ім'я класу
invoke LoadIcon,NULL,IDI_APPLICATION ; ресурс піктограми
mov wc.hIcon,eax ; дескриптор "великої" піктограми
mov wc.hIconSm,eax ; дескриптор маленького віконця
invoke LoadCursor,NULL,IDC_ARROW ; ресурс курсора
mov wc.hCursor,eax
mov wc.cbClsExtra,NULL ; кількість байтів для структури
mov wc.cbWndExtra,NULL ; кількість байтів для додаткових структур
invoke RegisterClassEx, ADDR wc ; функція реєстрації класу вікна
invoke CreateWindowEx, 0, ADDR ClassName, \ ; стиль та адреса імені класу
ADDR AppName,\ ; адреса імені вікна
WS_OVERLAPPEDWINDOW, \ ; базовий стиль
CW_USEDEFAULT,CW_USEDEFAULT,\; гориз. та верт. координати вікна
500,400, \ ; ширина та висота вікна
NULL,NULL,\ ; дескриптори батьківського вікна та меню
hInst,NULL ; дескриптор програми
mov hwnd,eax
invoke RegisterHotKey,hwnd,065h,MOD_CONTROL or MOD_ALT, 041h invoke ShowWindow, hwnd,SW_SHOWNORMAL ; видимість вікна
invoke UpdateWindow, hwnd ; оновлення клієнтської області вікна повідомленням WM_PAINT
.WHILE TRUE ; поки істинне, то
invoke GetMessage, ADDR msg, NULL,0,0 ; читання повідомлення
.BREAK .IF (!eax) ; закінчення циклу при виконанні умови
invoke TranslateMessage, ADDR msg ; трансляція до черги
invoke DispatchMessage, ADDR msg ; відсилання повідомлення ; процедурі вікна
.ENDW ; закінчення циклу оброблення повідомлень
mov eax,msg.wParam
ret ; повернення з процедури
WinMain endp ; закінчення процедури з ім'ям WinMain WndProc proc hWnd:HWND, uMsg:UINT,\
wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC ; резервування стека під хендл вікна
LOCAL ps:PAINTSTRUCT ; резервування стека під структуру PAINTSTRUCT
invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL + ALT + A (041h is 65 - 065h is 101)
.if uMsg == WM_CREATE
invoke RegisterHotKey,hWnd,065h,MOD_CONTROL or MOD_ALT, 041h ; CTRL + ALT + A (041h is 65 - 065h is 101)
.ELSEIF uMsg==WM_HOTKEY ; якщо є повідомлення від клавіатури,
invoke MessageBox,hWnd,addr hmsg,addr hcap, MB_OK or MB_ICONINFORMATION
invoke InvalidateRect, hWnd, NULL, TRUE ; виклик функції та WM_PAINT
.ELSEIF uMsg==WM_PAINT ; якщо є повідомлення про перерисування invoke BeginPaint,hWnd, ADDR ps ; виклик підготовчої процедури та ; заповнення структури
invoke EndPaint,hWnd, ADDR ps ; закінчення рисування
.ELSEIF uMsg==WM_DESTROY ; якщо є повідомлення про знищення вікна
invoke UnregisterHotKey,hWnd,065h
invoke PostQuitMessage, NULL ; передача повідомлення про знищення
.ELSE ; інакше
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; обробка та відправка повідомлення до WndProc
ret ; повернення з процедури
.ENDIF ; закінчення логічної структури .IF - .ELSEIF
xor eax,eax ; підготування до закінчення
ret ; повернення з процедури
WndProc endp ; закінчення процедури WndProc
end start ; закінчення програми з ім'ям start
Результат виконання програми :
Рис. 1
Висновки: Поглибили і закріпили знання з архітектури МП платформи х86 і навички його програмування.Придбали практичні навички обробки повідомлень від клавіатури та мишки, написаних мовою асемблеру з використанням АРІ-функцій під Win32.
Документ
Категория
Рефераты
Просмотров
17
Размер файла
84 Кб
Теги
атури, клава, пов, мишка, обробки, лр14, домлень
1/--страниц
Пожаловаться на содержимое документа