Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / мышь / 6 сообщений из 6, страница 1 из 1
23.06.2005, 04:22
    #33130184
Forgottn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
мышь
Суть проблемы примерно такова:
Borland C++ for DOS... Графический режим...
Мне нужно подключить мышь - т.е. обеспечить сообщения о передвижении и нажатии на кнопки мыши(с номером кнопки и позицией курсора).
Внимание вопрос: как это сделать?
...
Рейтинг: 0 / 0
23.06.2005, 07:19
    #33130222
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
мышь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
function X_Mouse:word;
var x:word;
begin
      asm
	mov ax, 3 
	int 33h
         shr cx, 1 
	mov x,cx
      end;
x_mouse:=x;
end;
function Y_Mouse:word;
var y:word;
begin
      asm
	mov ax, 3 
	int 33h
	mov Y,dx
      end;
y_mouse:=y;
end;

procedure set_mouse_coords(x,y:integer);
begin
  asm
   pusha
   mov cx,x
   shl cx, 1 
   mov dx,y
   mov ax, 4 
   int 33h
   popa
  end;
end;
function LEFT_KEY:BOOLEAN;
VAR K:BOOLEAN;
LABEL L1;
BEGIN
  ASM
   MOV AX, 3 
   INT 33H
   MOV K,FALSE
   AND BL, 1 
   JZ L1
   MOV K,TRUE
   L1:
  END;
  LEFT_KEY:=K;
END;
function right_KEY:BOOLEAN;
VAR K:BOOLEAN;
LABEL L1;
BEGIN
  ASM
   MOV AX, 3 
   INT 33H
   MOV K,FALSE
   AND BL, 2 
   JZ L1
   MOV K,TRUE
   L1:
  END;
  right_KEY:=K;
END;
function mid_KEY:BOOLEAN;
VAR K:BOOLEAN;
LABEL L1;
BEGIN
  ASM
   MOV AX, 3 
   INT 33H
   MOV K,FALSE
   AND BL, 4 
   JZ L1
   MOV K,TRUE
   L1:
  END;
  mid_KEY:=K;
END;

это на паскале, сам догадаешся что дальше
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
23.06.2005, 07:22
    #33130225
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
мышь
ForgottnСуть проблемы примерно такова:
Borland C++ for DOS... Графический режим...
Мне нужно подключить мышь - т.е. обеспечить сообщения о передвижении и нажатии на кнопки мыши(с номером кнопки и позицией курсора).
Внимание вопрос: как это сделать?
Внимание ответ:
через использование функции int86(...), а в параметрах указать 0х33 - прерывание...
Регистр AX указывает функцию, обрабатываемую прерыванием: 0 - для инициализации мыши, 1- сделать курсор мыши видимым, 2- сделать курсор мыши невидимым, 3 - получение статуса клавиш и положения курсора мыши;
Используемые функции передают значения параметров в регистрах BX,CX,DX.
Функции возвращают значения в регистры AX,BX,CX,DX.

Если передана функция 0, то при наличии мыши в AX содержится -1, в ВХ - число клавиш. При отсутствии мыши в АХ содержится 0;

Если передана функция 3, то в ВХ содержится статус клавиш: бит 0 соответствует левой клавише (0 - нажата, 1 - не нажата), бит 1 - правой клавише; в СХ содержится горизонтальное положение курсора, в DX-вертикальное...

Успехов в этом нелегком труде...
...
Рейтинг: 0 / 0
23.06.2005, 07:40
    #33130231
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
мышь
alex_k
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 function  X_Mouse:word;
 var  x:word;
 begin 
x_mouse:=x;
 end ;
 function  Y_Mouse:word;
 var  y:word;
 begin 
y_mouse:=y;
 end ;
 procedure  set_mouse_coords(x,y:integer);
 begin 
 end ;
 function  LEFT_KEY:BOOLEAN;
 VAR  K:BOOLEAN;
 LABEL  L1;
  LEFT_KEY:=K;
 END ;
 function  right_KEY:BOOLEAN;
 VAR  K:BOOLEAN;
 LABEL  L1;
  right_KEY:=K;
 END ;
 function  mid_KEY:BOOLEAN;
 VAR  K:BOOLEAN;
 LABEL  L1;
 BEGIN 
  mid_KEY:=K;
 END ;

это на паскале, сам догадаешся что дальше
Posted via ActualForum NNTP Server 1.2я вырезал то, что не на паскале, теперь - чисто на паскале ! :)
...
Рейтинг: 0 / 0
23.06.2005, 08:55
    #33130286
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
мышь
В далеком 1990 году в одной из своих программ я использовал вот код, который приведен ниже. Детали уже не вспомню. По-моему, это для Turbo-C от Borland.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
#include <graphics.h>
#include <ctype.h>
#include <bios.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <alloc.h>
#include <math.h>
#include <process.h>
#include <stdlib.h>
#include <io.h>
#include <dir.h>
#include <time.h>
#include <fcntl.h>


void mouse_on(void)
   {
    union REGS r;
    r.x.ax=0x1;
    int86(0x33, &r, &r);
   }
void mouse_off(void)
   {
    union REGS r;
    r.x.ax=0x2;
    int86(0x33, &r, &r);

   }
int text_mouse_init(void)
   {
     union REGS r;
     r.x.ax=0x0;
     int86(0x33, &r, &r);
     if(r.x.ax== 0 )
      {
        return( 0 );
      }
     else
      {
        return(  1  );
      }
    }

void graph_mouse_init(void)
 {
   union REGS r;struct SREGS sr;
   static unsigned int mask[]  = {
   ~0xffff,   ~0x6006,   ~0x6016,   ~0x60f6,   ~0x37ec,   ~0x1bd8,   ~0x0db0,
   ~0x03c0,

   ~0x03c0,   ~0x1818,   ~0x318c,   ~0x63c6,   ~0x67f6,   ~0x6ff6,   ~0x4002,
   ~0xffff,




   0xffff,   0x6006,   0x6016,   0x60f6,   0x37ec,   0x1bd8,   0x0db0,
   0x03c0,

   0x03c0,   0x1818,   0x318c,   0x63c6,   0x67f6,   0x6ff6,   0x4002,
   0xffff



/*
   11111111 11111111;  1
   01100000 00000110;  2
   01100000 00010110;  3
   01100000 11110110;  4
   00110111 11101100;  5
   00011011 11011000;  6
   00001101 10110000;  7
   00000011 11000000; -
   00000011 11000000; -
   00011000 00011000; 7
   00110001 10001100; 6
   01100011 11000110; 5
   01100111 11110110; 4
   01101111 11110110; 3
   01000000 00000010; 2
   11111111 11111111; 1

   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
   111111111111111;
*/
  };



   r.x.ax=0x9;
   r.x.bx= 0 ;
   r.x.cx= 0 ;
   sr.es=FP_SEG(mask);
   r.x.dx=FP_OFF(mask);
   int86x(0x33,&r,&r,&sr);
 }
void get_mouse (unsigned int *xx,unsigned int *yy,unsigned int *button)
   {
     union REGS r;
        r.x.ax=0x03;
        int86(0x33, &r, &r);
        *xx=r.x.cx;
        *yy=r.x.dx;
        *button=r.x.bx;
   }


void set_mouse(unsigned int xx,unsigned int yy)
   {
     union REGS r;
        r.x.ax=0x04;
        r.x.cx=xx;
        r.x.dx=yy;
        int86(0x33, &r, &r);
   }


void set_mouse_box(unsigned int x1,unsigned int y1,
unsigned int x2,unsigned int y2)
   {
     union REGS r;
        r.x.ax=0x07;
        r.x.cx=x1;
        r.x.dx=x2;
        int86(0x33, &r, &r);
        r.x.ax=0x08;
        r.x.cx=y1;
        r.x.dx=y2;
        int86(0x33, &r, &r);

   }

void mouse_fill(void)
  {
   union REGS r;
     r.x.ax=0xa;
     r.x.cx=0xffff;
     if( *( (char *)MK_FP( 0 ,0x449) )== 7 )
      
     r.x.dx=0x7f00;

     else

     r.x.dx=0x5f00;
     r.x.bx= 0 ;
     int86(0x33, &r, &r);
  }

wait_mouse_button_off()
    {
     union REGS r;
      do
       {
         r.x.ax=0x03;
         int86(0x33, &r, &r);
       }
      while(r.x.bx);
    }

...
Рейтинг: 0 / 0
23.06.2005, 09:00
    #33130289
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
мышь
точно!
инициализацию выложить забыл :-)
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / мышь / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]