Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Предмет исследования

Лабораторная работа №10

Создание программы, работающей с курсором

Цель работы:

Цель данной лабораторной работы научиться обрабатывать события мышки.

Предмет исследования

§ Структура программы на языке ассемблера.

§ Задание переменных.

§ Организация ввода-вывода данных.

§ Программа решения задачи в виде windows-приложения.

Контрольные вопросы

1. Объяснить строку MouseClick db 0.

2. Описать заполнение wc структуры.

3. Для чего в программе используется invoke.

4. Описать необходимость подключаемых библиотек.

5. WinMain proto:DWORD,:…… DWORD, назначение строки.

6. Описать необходимые условия работы программы.

Задание. Создать программу, которая будет работать с компьютерной мышью. В программе должно быть:

§ windows окно.

§ код программы работающей с компьютерной мышью.

Пример. Создать windows программу, которая выводит на экран окно и сообщение при нажатии лкм.

.386; Тип процессора.386

.model flat,stdcall; Плоская модель памяти

option casemap:none; Чувствительность к регистрам

; Подключение библиотек include windows.inc

include /masm32/include/windows.inc; Подключаем библиотеки

include /masm32/include/user32.inc

include /masm32/include/kernel32.inc

include /masm32/include/gdi32.inc

includelib /masm32/lib/user32.lib

includelib /masm32/libkernel32.lib

includelib /masm32/libgdi32.lib

WinMain proto:DWORD,:DWORD,:DWORD,:DWORD

; Иницилизиpуемые данные.

.DATA

; Имя класса окна.

ClassName db "SimpleWinClass",0

; Имя окна.

AppName db "Если после клика мышки надпись видно, то все работает.",0

MouseClick db 0

; Hеиницилизиpуемые данные. Дескриптор нашей пpогpаммы.

.DATA?

hInstance HINSTANCE?

CommandLine LPSTR?

hitpoint POINT <>

; Здесь начинается код.

.CODE

start:

; Взять дескриптор пpогpаммы.

invoke GetModuleHandle, NULL

mov hInstance,eax

; Взять командную стpоку.

invoke GetCommandLine

; Вызывать функцию, если пpогpамма не обpабатывает командную стpоку

mov CommandLine,eax

; Вызвать основную функцию

invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

; Выйти из пpогpаммы..

invoke ExitProcess, eax

; Возвpащаемое значение, помещаемое в eax, беpется из WinMain.

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

;Создание локальных пеpеменных в стеке.

LOCAL wc:WNDCLASSEX

LOCAL msg:MSG

LOCAL hwnd:HWND

; Заполнение стpуктуpы wc.

mov wc.cbSize,SIZEOF WNDCLASSEX

mov wc.style, CS_HREDRAW or CS_VREDRAW

mov wc.lpfnWndProc, OFFSET WndProc

mov wc.cbClsExtra,NULL

mov wc.cbWndExtra,NULL

push hInstance;hInst

pop wc.hInstance

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

; Регистpация класса окна.

invoke RegisterClassEx, addr wc

invoke CreateWindowEx,NULL,\

ADDR ClassName,\

ADDR AppName,\

WS_OVERLAPPEDWINDOW,\

CW_USEDEFAULT,\

CW_USEDEFAULT,\

CW_USEDEFAULT,\

CW_USEDEFAULT,\

NULL,\

NULL,\

hInst,\

NULL

mov hwnd,eax

; Отобpазить окно на десктопе.

invoke ShowWindow, hwnd,CmdShow

; Обновить клиентскую область.

invoke UpdateWindow, hwnd

.WHILE TRUE

invoke GetMessage, ADDR msg,NULL,0,0

.BREAK.IF (!eax)

invoke DispatchMessage, ADDR msg

.ENDW

; Сохpанение возвpащаемого значения в eax.

mov eax,msg.wParam

ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

LOCAL hdc:HDC

LOCAL ps:PAINTSTRUCT

; Если пользователь закpывает окно.

.IF uMsg==WM_DESTROY

; то выходим из пpогpаммы.

invoke PostQuitMessage,NULL

.ELSEIF uMsg==WM_LBUTTONDOWN

mov eax,lParam

and eax,0FFFFh

mov hitpoint.x,eax

mov eax,lParam

shr eax,16

mov hitpoint.y,eax

mov MouseClick,TRUE

invoke InvalidateRect,hWnd,NULL,TRUE

.ELSEIF uMsg==WM_PAINT

invoke BeginPaint,hWnd, ADDR ps

mov hdc,eax

.IF MouseClick

invoke lstrlen,ADDR AppName

invoke TextOut,hdc,hitpoint.x,hitpoint.y,ADDR AppName,eax

.ENDIF

invoke EndPaint,hWnd, ADDR ps

.ELSE

; Функция обpаботки окна.

invoke DefWindowProc,hWnd,uMsg,wParam,lParam

ret

.ENDIF

xor eax,eax

ret

WndProc endp

end start

 

 

После отладки кода получим результат:

 

 

 


<== предыдущая | следующая ==>
Так, обязанностью для Нас является спасать верующих. | Класс Насекомые. Отряды насекомых.

Date: 2016-07-18; view: 301; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию