我正在为Unix平台制作一个控制台应用程序,我在使用curses(或ncurses)库来处理键盘和鼠标输入。问题在于,除了这个页面和这个页面之外,我几乎找不到有关如何使用它的文档,并且这些页面没有非常详细的示例。
我已经成功捕获了左键点击事件,但我无法使右键点击事件生效,因为终端模拟器的选项菜单出现在光标位置,但该事件未由应用程序处理。我该如何避免这种情况并让应用程序捕获该事件?
以下是我用于配置鼠标事件的代码行:
以下是我用于配置鼠标事件的代码行:
// Set up mouse event throwing
mousemask(BUTTON1_PRESSED | BUTTON2_PRESSED, NULL);
在处理输入的方法中,我有以下内容:
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;
}
我还尝试使用ALL_MOUSE_EVENTS
掩码配置mousemask()
,但在最后的else
子句中仍然没有打印任何事件,所以我认为事件根本没有触发。非常感谢您的任何帮助。
BUTTON0_CLICKED
表示左键单击和BUTTON3_CLICKED
表示右键单击。 - Pedro CoriBUTTON1_*
、BUTTON2_*
、BUTTON3_*
、BUTTON4_*
和BUTTON5_*
分别与左键、中键、右键、向上滚动和向下滚动有关。在Ubuntu 20.04.1 LTS中没有BUTTON0_*
或BUTTON6_*
。 - schneiderfelipe