Здравствуйте, Доброжелатель, Вы писали:
Д>Все бы хорошо, но я, наверное, не сформулировал нормально вопрос, какие функции c(си) есть для работы с мышью под дос?...
Roman_M прав в С нет никаких функций работы с мышью
но если под дос то следует использовать досовый драйвер, который вешается на Int 33h
использовать не обязательно асмом, можно используя библиотеки поставляемые с различными компиляторами...
пример под Watcom C/C++ под DOS4GW экстендер:
/* Состояния кнопок */
unsigned int NumButton(void); // Количество кнопок мыши
void GetState(unsigned int* butt,unsigned int* x,unsigned int* y); // Состояние мыши
// butt — флаг состояния кнопок
// x,y — текущие вирт-е коорд-ты
char Pressed(void); // True, если нажата любая кнопка
void ButtPressed(int butt,int* stat,int* count,int* x, int* y);
// Возвращает инфо о нажатой клавише
// stat — состояние клавиш
// count — количество нажатий
// x,y — координаты
void ButtReleased(int butt,int* stat,int* count,int* x, int* y);
// Возвращает инфо о отпущенной клавише
// stat — состояние клавиш
// count — количество нажатий
// x,y — координаты
/* Окна */
void Window(int x1,int y1,int x2,int y2); // окно для мыши
void Screen(void); // окно во весь экран
/* Форма указателя */
void Show(void);
void Hide(void);
void TextCursor(unsigned int scrmask,unsigned int curmask);
void Blink(int yup,int ydn);
void GraphCursor(unsigned int far* scrcurmask,int x,int y);
/* Сохранение/восстановление состояния */
unsigned int BuffSize(void);
void Save(unsigned char far* Buff);
void Restore(unsigned char far* Buff);
/* Эмуляция клавы */
void SetItem(char NItem,MouseItemType* It); // Устанавливает эл-ты для выбора мышью
// NItem — Количество элементов
// Items — массив
void AddItem(MouseItemType *Item); // Добавляет ещё один элемент
void ClearItems(void);
void GetItem(char* NItem,MouseItemType* Items);
char KeyOrMousePressed(void); // Истина если нажата клавиша или мышь
unsigned int ReadKeyOrMouse(void); // Символ наж-й клавиши или выбр-й опции
private:
void activ(void);
MouseItemType *PItems;
char Present;
char NItem;
char Visible;
unsigned int NButton;
int x1m;
int x2m;
int y1m;
int y2m;
unsigned int speed2;
int VerRat;
int HorRat;
}Mouse;
char mouse_c::KeyOrMousePressed(void)
{
int b,k;
char MouseActive;
if (bioskey(1)!=0) return true;
else
{
asm mov ax,3
asm int 33h
b=_BX;
if ((_BX!=0)&&(NItem!=0))
{
MouseActive=false;
for (k=0;k<=NItem-1;k++)
{
if (MouseActive==false)
if ((In(GraphCooX(PItems[k].X1),GraphCooX(PItems[k].Y1),
GraphCooY(PItems[k].X2),GraphCooX(PItems[k].Y2))==true)&&
(b==PItems[k].Button)) MouseActive=true;
} // for
return MouseActive;
} //if
else return false;
}
}
unsigned int mouse_c::ReadKeyOrMouse(void)
{
unsigned char k;
unsigned int b,bb;
char MouseActive;
unsigned int result=-1;
if (Present)
{
loop:
if (bioskey(1)!=0) return bioskey(0);
else
if (NItem!=0)
{
MouseActive=false;
asm mov ax,3
asm int 33h
bb=_BX;
if (bb!=0)
for (k=0;k<=NItem-1;k++)
{
if (MouseActive==false)
{
if ((bb==PItems[k].Button)&&In(GraphCooX(PItems[k].X1),GraphCooX(PItems[k].Y1),
GraphCooX(PItems[k].X2),GraphCooX(PItems[k].Y2)))
{
MouseActive=true;
result=(unsigned int)(PItems[k].Key);
}
}//if
}//for
if (MouseActive==0) goto loop;
}//NItem
Здравствуйте, Доброжелатель, Вы писали:
Д>Кто может подскажите, какие функции припас Microsoft, для работы с мышью в досе?
ээ.. помниться интеррупты были... ээ
int 33h помоему... вот функции, номер в AL регистре:
00h -- Reset driver and read status
01h -- Show cursor
02h -- Hide cursor
03h -- Return position and button status
04h -- Position cursor
05h -- Return button press data
06h -- Return button release data
07h -- Define horizontal cursor range
08h -- Define vertical cursor range
09h -- Define graphics cursor
0Ah -- define text cursor
0Bh -- Read motion counters
0Ch -- Define interrupt subroutine parameters
0Dh -- Light pen emulation ON
0Eh -- Light pen emulation OFF
0Fh -- Define mickey/pixel ratio
10h -- Define screen region for updating
... и т.д., лучше посмотри в инете...
Это если правильно понял ты пишешь досовую прогу а не "консольную"...
В консольной лучше через Win32API...
Здравствуйте, Доброжелатель, Вы писали:
Д>Все бы хорошо, но я, наверное, не сформулировал нормально вопрос, какие функции c(си) есть для работы с мышью под дос?...