Files
templates/ASMOUSE.CPP
2024-09-10 22:24:24 +03:00

131 lines
4.2 KiB
C++
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/****************************************************************************
** Эта программа демонстрирует, как можно добиться взаимодействия с мышкой,**
** используя С++ и Ассемблер. **
****************************************************************************/
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <iostream.h>
//Глобальные переменные, хранящие координаты и признак нажатия на кнопку
//мыши.
unsigned int MouseX, MouseY, MouseB;
char IfMouse ();
void ShowMouse ();
void HideMouse ();
void ReadMouse ();
void SetMouseXY (unsigned int X, unsigned int Y);
void SetMinMaxX (unsigned int Min, unsigned int Max);
void SetMinMaxY (unsigned int Min, unsigned int Max);
//Эта процедура проверяет доступна ли мышь
char IfMouse ()
{
unsigned int Result;
asm mov ax, 0
asm int 0x33
asm mov Result, ax
return Result;
}
//Эта процедура делает видимым курсор мыши
void ShowMouse ()
{
asm mov ax, 0x1
asm int 0x33
}
//Эта процедура делает невидимым курсор мыши
void HideMouse ()
{
asm mov ax, 0x2
asm int 0x33
}
//Эта процедура считывает положение курсора мыши и признак нажатия
//на клавишу
void ReadMouse ()
{
asm mov ax, 0x3
asm int 0x33
asm mov MouseB, bx
asm mov MouseX, cx
asm mov MouseY, dx
}
//Эта процедура устанавливает курсор в другие координаты
void SetMouseXY (unsigned int X, unsigned int Y)
{
asm mov ax, 0x4
asm mov cx, X
asm mov dx, Y
asm int 0x33
}
//Эта процедура устанавливает минимальное и максимальное значение
//границ промежутка, в котором может двигаться курсор мыши
//в горизонтальном положении.
void SetMinMaxX (unsigned int Min, unsigned int Max)
{
asm mov ax, 0x7
asm mov cx, Min
asm mov dx, Max
asm int 0x33
}
//Эта процедура устанавливает минимальное и максимальное значение
//границ промежутка, в котором может двигаться курсор мыши
//в вертикальном положении.
void SetMinMaxY (unsigned int Min, unsigned int Max)
{
asm mov ax, 0x8
asm mov cx, Min
asm mov dx, Max
asm int 0x33
}
//Главная пограмма - тестирует мышь и процедуры описанные выше.
main(){
clrscr();
IfMouse();
cout<<"Мышь доступна в системе.\n";
delay(3000);
cout<<"Сейчас появится курсор - задержка 3 сек.\n";
delay(3000);
ShowMouse();
cout<<"Сейчас курсор исчезнет - задержка 3 сек.\n";
delay(3000);
HideMouse();
cout<<"Через 3 сек курсор появится вновь.\n";
delay(3000);
ShowMouse();
ReadMouse();
cout<<"\nКоординаты мыши на момент #1:\n";
cout<<"Х-координата: "<<MouseX<<"\n";
cout<<"У-координата "<<MouseY<<"\n";
delay(3000);
cout<<"Через 3 сек поменяем координаты мыши на х=120 и у=120\n";
delay(3000);
SetMouseXY(120,120);
ReadMouse();
cout<<"\nКоординаты мыши на момент #2:\n";
cout<<"Х-координата: "<<MouseX<<"\n";
cout<<"У-координата "<<MouseY<<"\n";
delay(3000);
cout<<"\nНажмите клавишу мыши.\n";
delay(3000);
ReadMouse();
//if ((MouseB&1)==1) cout<<"\nКлавиша мыши нажата.";
if (MouseB==1) cout<<"\nКлавиша мыши нажата.";
else cout<<"\nКлавиша мыши не нажата.";
delay(3000);
cout<<"\nУстановим границы движения мыши по экрану:\n";
cout<<"100<X<300\n";
cout<<"0<Y<10\n";
SetMinMaxX(100,300);
SetMinMaxY(0,10);
cout<<"\nДля завершения работы программы нажмите любую клавишу.\n";
getch();
return 0;
}