Воскресенье, 13.07.2025, 00:32
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню
Форма входа
Категории раздела
Delphi/Pascal [0]
C/C++/C# [2]
Java/PHP/HTML [0]
Поиск
Наш опрос
Каким языком программирования вы пользуетесь?
Всего ответов: 52
Друзья сайта
Европа 3
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Программер
Главная » Статьи » Система » C/C++/C#

Работа с мышкой в DOS

Описуха

  • mymouse.cpp - функции для работы с мышкой
  • mymouse.h - прототипы функций
  • mforms.h - формы курсора мыши (3 штуки: стрелка, крест, прямоугольник)

Не забудьте включить файл mymouse.cpp в ваш проект!!!

Исходники

Файл mymouse.h

// Структура состояния мыши
struct MouseState 
{
 int x,y;
 int buttons;
};

int ResetMouse();
void ShowMouseCursor();
void HideMouseCursor();
void MoveMouseCursor(int x,int y);
void ReadMouseState(MouseState &s);
void SetMouseHoriz(int min,int max);
void SetMouseVert(int min,int max);
void SetMouseShape(int mask[32],char x,char y);
int MouseInArea(int x1,int y1,int x2,int y2);
void SetMouseArea(int x1,int y1,int x2,int y2); 

Файл mymouse.cpp
#include <dos.h>
#include "mymouse.h"

int ResetMouse()
{
_asm { 
 xor ax,ax
 int 0x33
 }
 return (_AX==0xFFFF);
}

// Функция отображает курсор мыши
void ShowMouseCursor()
{
 _asm{ 
 mov ax,1
 int 0x33
 }
}

// Функция скрывает курсор мыши
void HideMouseCursor()
{
 _asm{ 
 mov ax,2
 int 0x33
 }
}

// Функция устанавливает курсор мыши в коорд. X,Y
void MoveMouseCursor(int x,int y)
{
 _asm{ 
 mov ax,4
 mov cx,x
 mov dx,y
 int 0x33
 }
}

// Функция читает состояние мыши
// Позиция, состояние кнопок
void ReadMouseState(MouseState &s)
{
 _asm{ 
 mov ax,3
 int 0x33
 }
 #if defined(__COMPACT__) || defined(__LARGE__) || defined(__HUGE__)
 _asm{ 
 push es
 push di
 les di,dword ptr s
 mov es:[di],cx // X
 mov es:[di+2],dx // Y
 mov es:[di+4],bx // button
 pop di
 pop es
 }
 #else // Короткий адрес (без сегмента)
 _asm{ 
 push di
 mov di,word ptr s
 mov [di],cx
 mov [di+2],dx
 mov [di+4],bx
 pop di
 }
 #endif
}

// Функция устанавливает диапазон перемещения мыши по горизонтали
void SetMouseHoriz(int min,int max)
{
 _asm{ 
 mov ax,7
 mov cx,min
 mov dx,max
 int 0x33
 }
}

// Функция устанавливает диапазон перемещения мыши по вертикали
void SetMouseVert(int min,int max)
{
 _asm{ 
 mov ax,8
 mov cx,min
 mov dx,max
 int 0x33
 }
}

// Ф-я устанавливает форму курсора мыши
void SetMouseShape(int mask[32],char x,char y)
{
 union REGS inregs,outregs;
 struct SREGS segregs;
 inregs.x.ax=0x9;
 inregs.x.bx=x;
 inregs.x.cx=y;
 inregs.x.dx=FP_OFF(mask);
 segregs.es=FP_SEG(mask);
 int86x(0x33,&inregs,&outregs,&segregs);
} 

// 1 - Если мышь нах-ся в указанной области
int MouseInArea(int x1,int y1,int x2,int y2)
{
 MouseState ms;
 ReadMouseState(ms);
 if(ms.x>=x1 && ms.x<=x2 && ms.y>=y1 && ms.y<=y2) return(1);
 else return(0);
}

// Установка диапазано перемещения мыши
void SetMouseArea(int x1,int y1,int x2,int y2)
{
 SetMouseHoriz(x1,x2);
 SetMouseVert(y1,y2);
}
 

Файл mforms.h
// Курсор - перекрестие
int mc_cross[32]={
 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
 0xFFFF,0xFFFF,0xFFFF,0xFFFF, // AND
 0x0100,0x0100,0x0100,0x0000,0x0100,0x0100,0x0000,
 0xED6E,0x0000,0x0100,0x0100,0x0000,0x0100,0x0100,
 0x0100,0x0000 // XOR
}; 
// Курсор - стрелка
int mc_arrow[32]={
 0x3FFF,0x1FFF,0x0FFF,0x07FF,0x03FF,
 0x01FF,0x00FF,0x007F,0x003F,0x01FF,
 0x20FF,0x707F,0xF03F,0xF83F,0xFC3F,0xFE7F, // AND
 0x0000,0x4000,0x6000,0x7000,0x7800,
 0x7C00,0x7E00,0x7F00,0x7800,0x4800,
 0x0C00,0x0600,0x0700,0x0380,0x0180, // XOR
};

// Курсор - прямоугольник
int mc_rect[32]={
 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
 0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
 0xFFFF, // AND
 0x0000,0x0000,0x3FFC,0x2004,0x2004,
 0x2004,0x2004,0x2004,0x2004,0x2004,
 0x2004,0x2004,0x2004,0x3FFC,0x0000,
 0x0000 // XOR
}; 
Источник: http://www.codenet.ru/
Категория: C/C++/C# | Добавил: Ivin (27.09.2009)
Просмотров: 3643 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Бесплатный конструктор сайтовuCozCopyright IvinCorp © 2025