Доброе время суток уважаемой конфе.
Тут вот понадобилось написать программину в Turbo C++ 3.0, которая в графическом режиме (graphics.h) будет работать с мышко (позиция, кнопки и т.д. и т.п.). Меня переглючило, как это сделать. Использовать желательно ТОЛЬКО средства C, расширения C++ не приветствуются (жаль...). Подскажите, кто знает. Желательно с примерами.
Заранее благодарен
07.02.05 22:21: Перенесено модератором из 'C/C++' — Павел Кузнецов
Здравствуйте, _Student_, Вы писали:
_S_>Тут вот понадобилось написать программину в Turbo C++ 3.0, которая в графическом режиме (graphics.h) будет работать с мышко (позиция, кнопки и т.д. и т.п.). Меня переглючило, как это сделать. Использовать желательно ТОЛЬКО средства C, расширения C++ не приветствуются (жаль...). Подскажите, кто знает. Желательно с примерами.
Копирайт исходников утерян

(остались со времен учебы в институте.) когдато всё это работало...
файл commons.h
//-- commons.h -------
//-- V1.1 28.01.95 --
//--------------------
#ifndef COMMONS_H
#define COMMONS_H
#include <dos.h>
#define CFound0 Col0
#define CFound1 Col1
#define CFound2 Col2
#define CFound3 Col3
#define CFound4 Col4
#define CText1 Col5
#define CText2 Col6
#define CText3 Col7
#define CLight Col8
#define CDark Col9
#define CLamp1 Col10
#define CLamp2 Col11
#define CMixture Col12
#define CWater Col13
#define CSteam Col14
#define CCountur Col15
#define CGaz Col5
#define CPres Col12
#define CAir Col13
#define CNo Col15
enum Colors {Col0,Col1,Col2,Col3,Col4,
Col5,Col6,Col7,Col8,Col9,
Col10,Col11,Col12,Col13,Col14,Col15
};
typedef struct palettetype PALETTE;
enum Orient {Horizontal,Vertical,Left,Right,Down,Up};
enum Boolean {False,True};
enum Condition {Passive,Active};
enum Zapor {NO,CLOSED,OPEN};
//------------------------------------
struct Location;
typedef Location* PLocation;
struct Location // Математическая точка
{
int X,Y;
Location(int InitX=0,int InitY=0): X(InitX), Y(InitY) {}
~Location() {};
};
//--------------------------------------
#endif
файл mouse.h
// Заголовочный файл драйвера мыши
// struct REGPACK ioregs;
//------ Сделать курсор невидимым ----------
void hide_cursor(void);
//------ Инициализация драйвера мыши --------
int init_mouse(void);
//-------- Установка курсора в позицию x,y ------------
void set_cursor_position(int x,int y);
//------- Установить соотношение микки-пиксел -----------
void set_mickey_pixel(void);
//------- Задать параметры курсора -----------------------
void set_cursor_shape(void);
//----- Cделать курсор видимым -------/
void show_cursor(void);
//----- Определить местоположение курсора -------
int read_cursor(int &x,int &y);
файл mouse.cpp
#include <dos.h>
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "commons.h"
static struct REGPACK iorg;
/******* Инициализация драйвера мыши *******/
int init_mouse(void)
{
iorg.r_ax=0;
intr(0x33,&iorg);
if(iorg.r_ax==0)
{
printf("MOUSE NOT INSTALLED!PRESS ANY KEY!\n");
getch();
closegraph();
exit(1);
}
return 0;
}
/****** Cделать курсор видимым *******/
void show_cursor(void)
{
iorg.r_ax=1;
intr(0x33,&iorg);
}
/******* Сделать курсор невидимым *********/
void hide_cursor(void)
{
iorg.r_ax=2;
intr(0x33,&iorg);
}
/********* Установка курсора в позицию x,y ***********/
void set_cursor_position(int x,int y)
{
iorg.r_ax=4;
iorg.r_cx=x+12;
iorg.r_dx=y;
intr(0x33,&iorg);
}
/******** Установить соотношение микки-пиксел **********/
void set_mickey_pixel(void)
{
iorg.r_ax=15;
iorg.r_cx=36;
iorg.r_dx=36;
intr(0x33,&iorg);
}
/******** Задать параметры курсора **********************/
void set_cursor_shape(void)
{
/* содержимое масок курсора и экрана */
unsigned int cursor[32]= // Рука
{
// Массив маски по "AND"
// 0xe1ff,0xc0ff,0xc0ff,0xc03f,
// 0xc01f,0x8007,0x0003,0x0000,
// 0x0000,0x0000,0x0000,0x0000,
// 0x0000,0x8001,0xc003,0xc003,
0xf3ff,0xe1ff,0xe1ff,0xe07f,
0xe03f,0xc00f,0x8007,0x0003,
0x0001,0x0001,0x0001,0x0001,
0x8001,0xc003,0xe007,0xe007,
// Массив маски по "XOR"
0x0c00,0x1200,0x1200,0x1380,
0x12c0,0x3270,0x5258,0x924c,
0x924a,0x900a,0x8002,0xc002,
0x6006,0x300c,0x1ff8,0x1ff8
};
/*
unsigned int cursor[32]= // Стрелка
{
// Массив маски по "AND"
0xfffc,0xfff8,0xffe0,0xff81,
0xfe01,0xf803,0xe003,0x8007,
0x0007,0x800f,0xc00f,0x801f,
0x021f,0x07ff,0x0fff,0x1fff,
// Массив маски по "XOR"
0x0001,0x0002,0x000e,0x003c,
0x00fc,0x03f8,0x0ff8,0x3ff0,
0xfff0,0x3fe0,0x1fe0,0x3fc0,
0x78c0,0xf000,0xe000,0xc000
};
*/
iorg.r_ax=9;
iorg.r_bx=16;
iorg.r_cx=0;
iorg.r_es=FP_SEG(cursor);
iorg.r_dx=FP_OFF(cursor);
intr(0x33,&iorg);
}
/****** Определить местоположение курсора ******/
int read_cursor(int &x,int &y)
{
int button;
iorg.r_ax=3;
intr(0x33,&iorg);
x=iorg.r_cx-12; /* горизонтальная координата курсора */
y=iorg.r_dx; /* вертикальная координата курсора */
button=iorg.r_bx; /* состояние клавиш мыши */
/* 1-левая клавиша */
/* 2-правая клавиша */
/* 3-средняя клавиша(Mouse Systems)*/
while(iorg.r_bx) intr(0x33,&iorg);
return button;
}
... << RSDN@Home 1.1.4 beta 4 rev. 303>>