Каталог статей

Главная » Статьи » 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
}; 

Категория: C/С++ | Добавил: virusik (03.07.2009)
Просмотров: 964 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
вход на сайт
Категории раздела
C/С++ [24]
статьи о языке C/С++
Visual FoxPro [1]
информация о языке Visual FoxPro
.NET [24]
статьи о языке программирования .NET
ваши статьи [4]
здесь вы можете размещать сваи статьи
модинг [4]
статьи о модинге ПК
Поиск по сайту
наши опросы
Оцените мой сайт
Всего ответов: 10
Мини-чат
помощь проекту
помоги проекту
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Каталог http://www.internetmir.ru Лучшие сайты интернета в каталоге Intenetmir
  • Delphi.int.ru - Сообщество программистов: общение, помощь, обмен опытом.
    реклама 88х31
    Каталог сайтов. Раскрутка. Хостинг. Каталог ссылок. Информационный портал - Старого.NET Шпоры, курсовые, пособия, рефераты, ВУЗы.
    Статистика
    webgari.com Рейтинг сайтов
    Раскрутка сайтов
    Яндекс цитирования
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0