【问题标题】:Mouse Interfacing In Turbo C++Turbo C++ 中的鼠标接口
【发布时间】:2021-09-21 08:22:21
【问题描述】:

我正在尝试将交互式鼠标接口添加到我的程序中,但我无法理解其中需要delay()

代码如下:

do
{
    getmousepos(&button,&x,&y);
    if(button==1)
    {
        delay(500);
        xx[i] = x;
        yy[i] = y;
        i++;
    }
}while(!kbhit());

不确定delay() 在这里做了什么。因为如果按下按钮,坐标无论如何都会分配给它们各自的数组。那还需要加什么延迟呢?

带有delay() 的程序给出了正确的输出。
但如果我删除它,屏幕上不会打印任何内容。
在这种情况下,delay() 有何重要意义?

【问题讨论】:

  • 这个问题真的是关于 MS-DOS,80 年代的操作系统,还是关于 Windows 命令提示符?
  • Sparky 的答案涵盖了您的问题,但是我只会在更改时向缓冲区添加一个值,因此 abs(xx-x[i-1])+abs(yy-y[i-1])>threshold 可以摆脱 delay 并提高鼠标处理的灵敏度和整体感觉。此外,鼠标事件通常应该处理像Button_press, Button_hold, Button_release 和或click, double-click,triple-click 这样的状态,所以我希望存储按钮的最后状态并在每个第一个事件上都有一些功能(重置缓冲区、填充缓冲区、执行缓冲区)...
  • 有关更多信息,请参阅 Convert Signature Bitmap to Signature String (very strange one) 并在我的函数 void signature_on_mouse(backbuffer &scr) 内的代码中查找 q0,q1 用法,它与您的代码几乎相同......它在 Borland/VCL/ 中是 vritten C++ fow Windows,所以鼠标 API 不同,但事件代码几乎与您应该查看的相同。但是,那个没有阈值(与在这种情况下鼠标 API 已经涵盖的 API 不同)。 +1 尝试理解而不是仅仅复制粘贴代码

标签: mouse dos turbo-c++


【解决方案1】:

Turbo C++ ...这让我回味无穷。这是我所期望的,以及为什么需要delay()

这里有一个轮询循环。如果没有delay(),当 button 为 1 时,您将淹没您的 xx[]yy[] 缓冲区,并且可能会溢出它们也。请记住,当您按下鼠标按钮时,计算机可以多次执行该循环。 delay() 在某种程度上平衡了这一点。

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2011-12-09
    相关资源
    最近更新 更多