Ped*_*ori 9 c++ unix curses ncurses mouseevent
我正在为unix平台制作一个控制台应用程序,我正在使用curses(或ncurses)库来处理键盘和鼠标输入.问题是我发现很少有关于如何使用它的文档,从这个页面开始,这个没有非常详细的例子.我已设法捕获左键单击,但我无法让它为右键单击工作,因为终端模拟器的选项菜单出现在光标位置,但该事件未由应用程序处理.如何避免这种情况并在应用程序中捕获事件?
我有以下行来配置鼠标事件:
// Set up mouse event throwing
mousemask(BUTTON1_PRESSED | BUTTON2_PRESSED, NULL);
Run Code Online (Sandbox Code Playgroud)
在处理输入的方法中,我有以下内容:
int c = getch();
MEVENT event;
switch(c)
{
case KEY_UP:
... do stuff
break;
case KEY_DOWN:
... do stuff
break;
case KEY_MOUSE:
if(getmouse(&event) == OK)
{
if(event.bstate & BUTTON1_PRESSED) // This works for left-click
{
... do stuff
}
else if(event.bstate & BUTTON2_PRESSED) // This doesn't capture right-click
{
... do other stuff
}
else
fprintf(stderr, "Event: %i", event.bstate); // Doesn't print anything on right-click
}
break;
default:
return;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试mousemask()使用ALL_MOUSE_EVENTS掩码进行配置,但它仍然不会在最后一个else子句上打印任何事件,因此我认为事件不会触发.任何有关这方面的帮助将非常感激.
小智 12
对于其他任何人来到这里试图弄清楚为什么他们不能用Ncurses 完全捕获鼠标事件,很可能这就是你需要的线路:
keypad(window, TRUE);
Run Code Online (Sandbox Code Playgroud)
没有这个,我没有得到任何鼠标事件getch().
我看到的所有教程/示例中都缺少这个,这就是为什么我花了很多时间来弄清楚我的代码出了什么问题 - 也许这个答案会帮助其他人找到比我更快的解决方案.