131 lines
4.2 KiB
C++
Executable File
131 lines
4.2 KiB
C++
Executable File
/****************************************************************************
|
||
** Эта программа демонстрирует, как можно добиться взаимодействия с мышкой,**
|
||
** используя С++ и Ассемблер. **
|
||
****************************************************************************/
|
||
|
||
#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;
|
||
} |