Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Проанализируем обработчики WMMOUSEMOVE И WM_POINT оконной процедуры приложения, т. к. именно здесь и выполняются все манипуляции по считыванию и отображению координат курсора мыши. Как мы знаем, все сообщения мыши содержат в lParam координаты курсора.
Координату х сохраним в переменной pointx, а координату у — в переменной point_y. Это делается в обработчике WMMOUSEMOVE при помощи следующего фрагмента кода:
mov
mov
ЕАХ, lParam
point_x, ЕАХ
and point_x, OFFFFh
shr EAX, 16
mov point_y, EAX

После того, как координаты вычислены и сохранены, выполняем формирование текстовой строки результата при помощи функции WIN API wsprintf. Строку текста сохраним в символьном буфере buf, а ее размер — в переменной ibuf. Эти переменные нужны для вызова функции TextOut.
Поскольку функция wsprintf вызывается в соответствии с директивой cdecl, важно не забыть освободить стек после вызова функции. Это все выполняется с помощью следующего кода:
push point_y
push offset sy
push point_x
push offset sx
push offset lpFmt
push offset buf
call wsprintf
add ESP, 24
mov ibuf, EAX

Наконец, для перерисовки окна приложения выполняем вызов функции InvalidateRect.
Задача обработчика сообщения WMPAINT — вывести текстовую строку с координатами курсора мыши в окно приложения. Функция TextOut, выполняющая эту операцию, в качестве координат принимает значения pointx и pointy, вычисленные ранее.
Следующий пример показывает, каким образом можно рисовать при помощи мыши. Это не самый лучший способ рисования, но на нем можно отследить некоторые особенности работы устройства мыши. Приложение обрабатывает СООбщеНИЯ WM_MOUSEMOVE, WM_RBUTTONDOWN, WM_LBUTTONDOWN И WMLBUTTONUP. Исходный текст приложения (назовем его MDRAW) приводится в листинге 5.18.
Листинг 5.18. Программа, выполняющая рисование в окне приложения с помощью мыши
. MDRAW.ASM
.386
.model flat, stdcaii
option casemap :none
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\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
szDisplayName DB "РИСОВАНИЕ ПРИ ПОМОЩИ МЫШИ", О
CommandLine DD О
hWnd DD О
hlnstance DD 0
szClassName DB "Demo Class", 0

Здесь сохраняем начальные координаты курсора мыши
prey_x DD 100
prev_y DD 100

Здесь сохраняем текущие координаты курсора мыши
cur_x
cur у
DD 0
DD 0


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru