在C中获取鼠标单击的坐标

时间:2012-10-16 17:57:32

标签: c mouse dos turbo-c

我在谷歌上发现这个头文件在C程序中执行与鼠标相关的事件,但我不知道int86 union REGS i,o;以及C中可用的其他int86类型函数是什么?我正在使用Windows操作系统和Turbo C。

#include<conio.h>
#include<stdio.h>
#include<dos.h>

initmouse();
void showmouseptr();
void restrictmousept(int,int,int,int);
void getmousepos(int *,int *,int *);
void hidemouseptr();

union REGS i,o;
initmouse()
{
     i.x.ax=0;
     int86(0x33,&i,&o);
     return(o.x.ax);
}
void showmouseptr()
{
   i.x.ax=1;
   int86(0x33,&i,&o);
}
void restrictmouseptr(int x1,int y1,int x2,int y2)
{
   i.x.ax=7;
   i.x.cx=x1;
   i.x.dx=x2;
   int86(0x33,&i,&o);
   i.x.ax=8;
   i.x.cx=y1;
   i.x.dx=y2;
   int86(0x33,&i,&o);
}
void getmousepos(int *button,int *x,int *y)
{
  i.x.ax=3;
  int86(0x33,&i,&o);
  *button=o.x.bx;
  *x=o.x.cx;
  *y=o.x.dx;
}

void hidemouseptr()
{
   i.x.ax=2;
   int86(0x33,&i,&o);
}

4 个答案:

答案 0 :(得分:3)

这看起来像MS-DOS的旧代码,用户使用x86中断来调用系统函数来获取鼠标坐标。如果此代码仍然可以在任何现代计算机的命令提示符下工作,我会感到惊讶。事实上,包括dos.h在内的顶部头文件可以解决这个问题。

in86()是在DOS模式下“中断”CPU的方式。它有点像现代操作系统中的函数调用方式。更多信息:http://wiki.answers.com/Q/What_is_the_INT86_function_in_C_programming

union是C中定义可以以不同方式访问的数据的方法。更多信息:http://www.go4expert.com/forums/showthread.php?t=15

目前还不清楚你要做什么,更不用说你正在运行的操作系统了。您可能希望首先选择一种语言(C#可能是一个良好的开端,假设您使用的是Windows),然后查看WinForms的基类库,以了解如何响应鼠标事件。有关WinForms的精彩教程,它将教你如何响应鼠标。

答案 1 :(得分:2)

丢弃该代码:它是旧的16位DOS,可能不是你想要的。

看来你对C来说比较新。在这种情况下,更好的建议是好好学习语言;检查网站周围的好学习参考。 Dennis Ritchie和Brian Kernighan的“C编程语言”是一个很好的起点。

话虽如此,C中没有int86个函数。这些是Borland Turbo C扩展。这就是人们如何在DOS中操纵鼠标,但现在它是不同的。

请注意,C语言基本上只是一种编程语言。它旨在表达算法。但是,C语言标准还为您提供了一个标准库:一组可以使用的预定义类型,函数和宏,以节省时间和可移植性。该库解决了一些基本功能,鼠标输入处理不是其中之一。

换句话说,在学习C之后,您将准备好处理特定操作系统的API。这是必需的,因为C标准库无法操纵任何类型的输入设备。您还将学习有关如何在现代操作系统中处理输入的一些基础知识。例如,要处理鼠标输入,您很可能需要创建窗口(或小部件)才能接收鼠标事件 - 这意味着您必须阅读关于底层窗口API。

有一些库可以为您访问系统的API并分析差异,为您提供编程选择。但是,直接研究和使用系统的API应该没有什么不同,除了可能的增强的可移植性。

答案 2 :(得分:1)

int86函数调用DOS鼠标中断33h。 dos中断特定于msdos操作系统,因此您的代码仅在msdos下可用。 'union REGS'是输入和输出寄存器,用作DOS中断的参数。 DOS中断类似于其他操作系统中的系统调用。

答案 3 :(得分:-1)

如果您想在Windows / Linux等下运行dosbox程序,可以使用turbo C

例如,在Windows上,只需创建一个运行批处理脚本的桌面链接即可在dosbox中运行您的程序,这就是我认为的蒸汽版Doom的工作方式

相关问题