【发布时间】:2011-11-19 17:49:03
【问题描述】:
我想知道NCurses中是否存在鼠标移动事件,是否有办法捕捉它们。在Interfacing with the mouse(来自NCurses programming HOWTO)之后,似乎通过在对mousemask 的调用中启用REPORT_MOUSE_POSITION 位,确实可以捕获鼠标移动事件。
所以,我试过了,但它似乎不起作用。我有这样的事情:
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 机器(Fedora 15,Ctrl+Alt+F2)的 tty 尝试了一个文本环境(没有 X),但没有成功。
最后,假设我做对了并且应该报告这些事件,那么鼠标移动事件的 MEVENT 的 bstate 字段是什么?
非常感谢!
【问题讨论】:
标签: c linux terminal mouseevent ncurses