powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Прерывание мыши
3 сообщений из 3, страница 1 из 1
Прерывание мыши
    #35164846
Фотография INOKENTiY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Подскажите как вызвать прерывания мыши для ее перемещения в консольном режиме из C++.
...
Рейтинг: 0 / 0
Прерывание мыши
    #35165161
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переместить мышь нельзя - ее человек перемещает. :)
Может быть имеется в виду либо узнать или установить положение курсора?

________________________________________________________
Глюк - это высокоорганизованная система не поддающихся определению частиц
...
Рейтинг: 0 / 0
Прерывание мыши
    #35165293
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INOKENTiYЗдравствуйте!
Подскажите как вызвать прерывания мыши для ее перемещения в консольном режиме из C++.
Если необходимо для DOS копай в сторону
Код: plaintext
1.
 <DOS.H>
void intr(int intno, struct REGPACK *preg);




Пример работает для старого компилятора BC ++ 3.1 для DOS
В Windows проекте и на M$ компиляторах >=VC++ 6.0 не работает.

Код: 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.
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
REGPACK regs;

// инициализация мыши
void InitMouse(int *nbuttons, int *OK)
{
  regs.r_ax= 0 ;                  // функция  0 
  intr(0x33, &regs);
  *OK=regs.r_ax;                //  0  - неуспех инициализации
                                // - 1  (FFFFh) - успех
  *nbuttons=regs.r_bx;          // количество клавиш мыши
}

// делает курсор видимым
void ShowMouse(void)
{
  regs.r_ax= 1 ;                  // функция  1 
  intr(0x33, &regs);
                                // возвращаемого значения нет
}

// делает курсор невидимым
void HideMouse(void)
{
  regs.r_ax= 2 ;                  // функция  2 
  intr(0x33, &regs);
                                // возвращаемого значения нет
}

// возвращает текущие координаты мыши и текущее состояние кнопок
void ReadMouse(int *x, int *y, int *buttons)
{
  regs.r_ax= 3 ;          // функция  3 
  intr(0x33, &regs);
  *buttons=regs.r_bx;   //  0  бит - левая кнопка
                        //  1  бит - правая кнопка
                        //  2  бит - центральная кнопка (если есть)
                        // если бит равен  1 , клавиша нажата,  0  - не нажата
  *x=regs.r_cx;         // горизонтальная координата курсора
  *y=regs.r_dx;         // вертикальная координата курсора
}

// установка курсора в точку в заданную позицию
void SetMouse(int x, int y)
{
  regs.r_ax= 4 ;          // функция  4 
  regs.r_cx=x;          // горизонтальная координата курсора
  regs.r_dx=y;          // вертикальная координата курсора
  intr(0x33, &regs);
                        // возвращаемого значения нет
}
// получение информации о количестве нажатий на клавишу
void GetMouse(int * button, long * number, int *x, int *y)
{
  regs.r_ax= 5 ;          // функция  5 
  regs.r_bx=*button;    // идентификация клавиш
                        //  0  бит - левая кнопка
                        //  1  бит - правая кнопка
                        //  2  бит - центральная кнопка (если есть)
  intr(0x33, &regs);
  *button=regs.r_ax;    // возвращаемые значения
                        // r_ax:
                        //  0  бит - левая кнопка
                        //  1  бит - правая кнопка
                        //  2  бит - центральная кнопка (если есть)
  *number=regs.r_bx;    // r_bx  - число нажатий указанной клавиши с момента
                        //         последнего вызова функции
  *x=regs.r_cx;         // r_cx  - горизонтальная координата курсора в
                        //         момент нажатия указанной клавиши
  *y=regs.r_dx;         // r_dx  - вертикальная координата курсора в
                        //         момент нажатия указанной клавиши

                        // после вызова функции счетчик обнуляется
}

// Глупая программа: после нажатия и отпускания левой кнопки курсор мыши
//пропадает.

void main(void)
{
  int nbuttons, OK, x, y, but, c;
  InitMouse( &nbuttons, &OK); printf("nb=%d  OK=%d\n",nbuttons,OK);
  ShowMouse();
  // цикл ожидания нажатия левой клавиши
  do
    ReadMouse(&x,&y,&but);
  while(!(but& 1 );
  // цикл ожидания отпускания левой клавиши
  do
    ReadMouse(&x,&y,&but);
  while(but& 1 );
  HideMouse();
  getch();
}

ИМХО тема должна быть перенесена в С++
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Прерывание мыши
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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