1

我在谷歌上找到了这个头文件来在 C 程序中执行鼠标相关事件,但我不知道 C 中int86 union REGS i,o;还有哪些其他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

4 回答 4

3

这看起来像是 MS-DOS 使用 x86 中断调用系统函数来获取鼠标坐标的旧代码。如果这段代码在任何现代计算机的命令提示符下仍然有效,我会感到惊讶。事实上,包括 dos.h 在内的顶部头文件会泄露这一点。

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

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

目前尚不清楚您要做什么,更不用说您在什么操作系统下运行了。您可能想先选择一种语言(C# 可能是一个好的开始,假设您使用的是 Windows),然后查看 WinForms 的基类库以了解如何响应鼠标事件。WinForms 上有很好的教程会教你如何响应鼠标。

于 2012-10-16T18:05:03.590 回答
2

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

看来您对 C 语言比较陌生。在这种情况下,更好的建议是好好学习该语言;检查站点以获取良好的学习参考。Dennis Ritchie 和 Brian Kernighan 所著的“The C Programming Language”是一个很好的起点。

int86话虽如此, “C”中没有函数。这些是 Borland Turbo C 扩展。这就是在 DOS 中操纵鼠标的方式,但现在情况不同了。

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

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

有一些库可以为您访问系统的 API 并找出差异,为您提供编程替代方案。不过,这与直接学习和使用系统的 API 应该没有什么不同,除了可能是为了增强可移植性。

于 2012-10-16T18:25:48.700 回答
1

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

于 2012-10-16T18:04:51.403 回答
-1

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

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

于 2014-03-20T09:58:24.393 回答