当前位置: 首页 > 面试题库 >

NCurses中的鼠标移动事件

吕越彬
2023-03-14
问题内容

我想知道NCurses中是否存在诸如鼠标移动事件之类的事情,以及是否有办法捕获它们。在与鼠标接口之后(来自NCurses编程HOWTO),似乎通过启用对REPORT_MOUSE_POSITION的调用mousemask,可以确实捕获鼠标移动事件。

因此,我尝试了一下,但似乎没有用。我有这样的事情:

int ch, count=0;
mmask_t old;

initscr ();
noecho ();
cbreak ();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);

while ((ch = getchar ()) != 'q')
{
  count++;
  if (ch == KEY_MOUSE)
  {
     MEVENT event;
     assert (getmouse (&event) == OK);
     mvprintw (0, 0, "Mouse Event!\n");
  }
  mvprintw (1, 1, "Event number %4d",count);
}

...

我期望随着鼠标光标的移动,事件计数器将增加。但事实并非如此。我还尝试在按下鼠标按钮1的同时将其移动,以查看是否生成“拖动”事件,并且它也没有执行任何操作。问题是,这是否仅仅是我的终端仿真器的问题?还是我误会了NCurses认为的鼠标移动事件?收到了所有其他鼠标事件(并且我可以在使用鼠标的控制台中操作程序)。

我尝试了gnome-terminal,xterm和其他一些东西。我还通过转到Linux计算机的tty(Fedora 15,Ctrl + Alt +
F2)尝试了文本环境(不带X),但该方法不起作用。

最后,假设我得到这个权利,这些事件应该报告,什么是bstate一个领域MEVENT的鼠标移动evenet?

提前谢谢了!


问题答案:

你需要:

  1. 支持鼠标事件报告的终端;
  2. $TERM指向terminfo条目,该条目具有适当的XM条目以正确初始化终端。

xterm至少满足(1);对于(2),您可能需要为设置一个不同的值TERM

尝试:

  • TERM=xterm-1002在按住按钮的同时将光标移到另一个单元格时获得位置事件;要么
  • TERM=xterm-1003 即使光标没有被按下,只要光标移动到另一个单元格,总是会得到一个位置事件。

结果事件REPORT_MOUSE_POSITION将在bstate字段上设置该位。

curs_mouse(3x)手册页的“ PORTABILITY”部分描述了终端的初始化,Xterm
Control Sequences
文档的“
Mouse Tracking”部分描述了相关的“ private mode”扩展。)

您上面提供的代码getch()无需使用getchar();并且需要一个refresh()内部循环!除此之外,xterm当使用适当的TERM设置之一时,它对我有用。



 类似资料:
  • 问题内容: 是否可以在页面加载后使用JavaScript获取鼠标位置而没有任何鼠标移动事件(不移动鼠标)? 问题答案: 真正的答案:不,不可能。 好的,我刚刚想到了一种方法。用覆盖整个文档的div覆盖页面。在其中,创建(例如)2,000 x 2,000个元素(以便该伪类将在IE 6中运行),每个元素的大小为1像素。为那些更改属性的元素创建CSS 规则(比如说)。在您的负载处理程序中,循环浏览这40

  • 任务是将物理光标移动到元素。 尝试以下操作: 和以下内容:

  • 本文向大家介绍js控制鼠标事件移动及移出效果显示,包括了js控制鼠标事件移动及移出效果显示的使用技巧和注意事项,需要的朋友参考一下 鼠标事件的移动及移出效果都可以使用js来自定义,下面有个示例,效果为当事件发生改变时背景颜色也随着改变,适合新手朋友

  • 在本章中,我们将详细介绍鼠标事件及其属性。 请注意:此类事件不仅可能来自于“鼠标设备”,还可能来自于对此类操作进行了模拟以实现兼容性的其他设备,例如手机和平板电脑。 鼠标事件类型 我们已经见过了其中一些事件: mousedown/mouseup 在元素上点击/释放鼠标按钮。 mouseover/mouseout 鼠标指针从一个元素上移入/移出。 mousemove 鼠标在元素上的每个移动都会触发此

  • 鼠标事件的种类 鼠标事件指与鼠标相关的事件,继承了MouseEvent接口。具体的事件主要有以下一些。 click:按下鼠标(通常是按下主按钮)时触发。 dblclick:在同一个元素上双击鼠标时触发。 mousedown:按下鼠标键时触发。 mouseup:释放按下的鼠标键时触发。 mousemove:当鼠标在一个节点内部移动时触发。当鼠标持续移动时,该事件会连续触发。为了避免性能问题,建议对该

  • 问题内容: 因此,正如标题所述,我想在鼠标拖动时移动椭圆。我先声明了椭圆并将其画出(因为我有8个椭圆,它们带有不同的颜色信息。四个是白色,另一个是红色)。我尝试做我对矩形所做的事情: 但这似乎不起作用。它给我一个错误 我有点困惑,因为我已经阅读了文档,并且Ellipse2D.Double存在这样的变量。 这是一个MCVE: 那么是否有替代算法,或者我只是在语法上缺少什么?我想知道解决方案。谢谢。