我想知道NCurses中是否有鼠标移动事件,并且是否有捕获它们的方法。按照NCurses编程HOWTO中的与鼠标交互,似乎通过在调用
因此,我尝试了这个方法,但似乎并没有起作用。我的代码类似于:
我原本期望当我移动鼠标光标时,会看到事件计数器增加。但实际上并没有。我还尝试了在按下鼠标按钮1的情况下移动它,以查看是否生成“拖动”事件,但仍然没有任何反应。问题是,这只是我的终端仿真器的问题吗?或者我误解了NCurses认为什么是鼠标移动事件?所有其他鼠标事件都已接收(我可以在使用鼠标的控制台程序中操作)。
我尝试了gnome-terminal、xterm和其他一些东西。我还通过转到我的Linux机器的tty(Fedora 15,Ctrl+Alt+F2)尝试了文本环境(没有X),但也没有起作用。
最后,假设我理解正确,并且应该报告这些事件,那么鼠标移动事件的MEVENT的bstate字段是什么?
非常感谢!
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机器的tty(Fedora 15,Ctrl+Alt+F2)尝试了文本环境(没有X),但也没有起作用。
最后,假设我理解正确,并且应该报告这些事件,那么鼠标移动事件的MEVENT的bstate字段是什么?
非常感谢!
TERM
变量?我知道你可以通过执行TERM=xterm-1002 ./program
来启动一个已经设置好的程序,但是是否有任何方法可以在代码中创建子进程时设置它,或者让程序分叉/启动一个新的进程并设置该变量? - Arthur Bouvier