【发布时间】: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 尝试理解而不是仅仅复制粘贴代码