powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как добраться до координат указателя мыши в DOS?
6 сообщений из 6, страница 1 из 1
Как добраться до координат указателя мыши в DOS?
    #34525896
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Многоуважаемый ALL прошу совета как добраться до координат указателя мыши в DOS через драйвер! В общем проблема состоит в лабе – надо сделать программулину на С++ чтобы она создавала прямоугольник по точкам на экране, отмечаемым по щелчку левой кнопки мыши. Большинство моих сокурсников сделало банальный цикл в main который постоянно опрашивает процессор по прерыванию int33h и забирает данные регистров после щелчка мыши. Но вот мне охота сделать по-нормальному - через драйвер мыши ( раз уж он есть).
В общем с черчением прямоугольника по координатам я разобрался, а вот с щелчком мыши и координатами указателя мыши происходит настоящая беда. Прочитав учебник по ASM’у и хорошенько погуглив у меня получилось забирать координаты указателя мыши в самой процедуре которая срабатывает после того как драйвер мыши реагирует на событие нажатия кнопки. Но вот вернуть эти самые координаты в Main или какую либо другую процедуру у меня не получается… 8-( Уважаемые знатоки! Подскажите плз как это сделать или укажите почему это сделать невозможно… Среда разработки Borland 3.1 Исходный код:
Код: 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.
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
//#include "Rect.h"
//#pragma inline

struct MouseState {
    int x, y;
    int Buttons;
    };
static void MouseState  far  ReadMouseState ( )
 {
    MouseState a; //Структура которая получает данные от мыши
     	       // Я пробовал передавать эту структуру сюда и по ссылке и другими способами , но программа
	      // после успешной компиляции при работе просто вылетала 8-( 
asm {
	push        0A000h
	pop         es           ; //ES - начало видеопамяти
	push        cs
	pop         ds           ;// DS - сегмент кода и данных этой программы
	push        cx           ; //СХ (Х-координата) и
	push        dx           ; //DX (Y-координата) потребуются в конце

push di
    mov di , word ptr a ;
    mov [di ], cx  ;
    mov [di+ 2 ], dx  ;
    mov [di+ 4 ], bx ; 
  pop di;

	mov         ax,000Ch
	mov         cx,0000h     ; //удалить обработчик событий мыши
	int         33h
 

    }
  
}

static void  SetMouseHandler ()
    {
  
 void  far * p =ReadMouseState;

     asm {
	mov         ax,12h
	int         10h           ;  // видеорежим 640x480
	mov         ax, 0          ; //инициализировать мышь
	int         33h
	mov         ax, 1          ; // показать курсор мыши
	int         33h

    mov ax, 0Ch       ;
    mov cx, 0002h     ;
    les dx, p;       //Указатель на процедуру котор сработает после нажатия кнопки мыши
    int 33h           ;
    mov         ah, 0   ;
    int         16h   ;
    int         33h          ;

	mov         ax, 1          ; // показать курсор мыши
	int         33h
    }

    }

void main(void)
{

 SetMouseHandler ();


}
...
Рейтинг: 0 / 0
Как добраться до координат указателя мыши в DOS?
    #34526110
PiterskiyМногоуважаемый ALL прошу совета как добраться до координат указателя мыши в DOS через драйвер! В общем проблема состоит в лабе – надо сделать программулину на С++ чтобы она создавала прямоугольник по точкам на экране, отмечаемым по щелчку левой кнопки мыши. Большинство моих сокурсников сделало банальный цикл в main который постоянно опрашивает процессор по прерыванию int33h и забирает данные регистров после щелчка мыши. Но вот мне охота сделать по-нормальному - через драйвер мыши ( раз уж он есть).
В общем с черчением прямоугольника по координатам я разобрался, а вот с щелчком мыши и координатами указателя мыши происходит настоящая беда. Прочитав учебник по ASM’у и хорошенько погуглив у меня получилось забирать координаты указателя мыши в самой процедуре которая срабатывает после того как драйвер мыши реагирует на событие нажатия кнопки. Но вот вернуть эти самые координаты в Main или какую либо другую процедуру у меня не получается… 8-( Уважаемые знатоки! Подскажите плз как это сделать или укажите почему это сделать невозможно… Среда разработки Borland 3.1 Исходный код:

Я не большой знаток ассемблера, но было однажды - баловался с драйвером мыши в Клиппере (дописывал по книге процедурку на С++, расширяющую его возможности).

Там были даны следующие рекомендации:

функция: 33h, прерывание: 3h.
в регистре ВХ возвращается какая кнопка нажата (1 - левая, 2 - правая),
в регистре СХ горизонтальное положение (в пикселях),
в регистре DX вертикальное положение (в пикселях).

Горизонтальное и вертикальное положение можно преобразовать в текстовые координаты путем деления на 8 (длина и ширина "полноразмерного"(мигающий прямоугольник) текстового курсора в ДОСе)

Может поможет...
...
Рейтинг: 0 / 0
Как добраться до координат указателя мыши в DOS?
    #34526303
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да это все уже сделано, проблема в том чтобы забрать результаты. Изменение void, static и т.д. в параметрах процедуры ничего не дали... 8-(
...
Рейтинг: 0 / 0
Как добраться до координат указателя мыши в DOS?
    #34526562
Piterskiyда это все уже сделано, проблема в том чтобы забрать результаты. Изменение void, static и т.д. в параметрах процедуры ничего не дали... 8-(
Кстати, в Borland C++ 3.1 есть замечательные функции: int86(), int86x(), intr() , которые являются "обертками" над прямым обращением к ассемблеру. Результаты там передаются либо через union REGS , либо через structure REGPACS .

Подробности читайте в хелпе...
...
Рейтинг: 0 / 0
Как добраться до координат указателя мыши в DOS?
    #34526800
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я знаю... Просто это задание звучит как не пользуясь функцией intr сделать прогу которая делает subj. Прямо указано что надо использовать ассемблерные вставки. Преподы млин измываются типа развивают "творческий" подход заставляя ходить кривыми путями там, где есть прямой!
p.s. В принципе остальные функции (кроме intr) разрешено использовать но как достучаться при помощи них к мыши - тоже вопрос....
...
Рейтинг: 0 / 0
Как добраться до координат указателя мыши в DOS?
    #34539565
Piterskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, решил! Станислав С. Спасибо большое! Совет очень помог.
Чуть позже (к завтрашнему вечеру) выложу решение.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как добраться до координат указателя мыши в DOS?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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