[英]Ncurses mouse wheel scroll up
我想使用ncurses处理鼠标滚轮滚动,但我遇到类似这个问题的问题:
http://lists.gnu.org/archive/html/bug-ncurses/2012-01/msg00011.html
Besides, mouse wheel-up event is only reported as mask 02000000
(BUTTON4_PRESSED) just one time, even if I scroll the wheel continuously.
我在debian 5,6,7和archlinux上尝试了ncurses 5.7到5.9。 每个ncurses库都有NCURSES_MOUSE_VERSION 1
,尝试使用--enable-ext-mouse重新编译。
向下滚动工作完美,ncurses报告每个滚动多个REPORT_MOUSE_POSITION 0x8000000
和一个BUTTON2_PRESSED 0x128
。
向上滚动只会导致BUTTON4_PRESSED 0x80000
的单个报告
MEVENT event;
mousemask(BUTTON1_CLICKED|BUTTON4_PRESSED|BUTTON2_PRESSED, NULL); // Tried with REPORT_MOUSE_POSITION also
while(run)
{
switch(in = getch())
{
case KEY_MOUSE:
if(getmouse(&event) == OK)
{
else if (event.bstate & BUTTON4_PRESSED)
line_up();
else if (event.bstate & BUTTON2_PRESSED || event.bstate == 0x8000000)
line_down();
}
break;
}
}
添加mouseinterval(0);
在您的主循环之外的某个地方。 (也许就在keypad(stdscr, TRUE);
之后keypad(stdscr, TRUE);
)
此命令导致鼠标事件没有延迟,因此您将无法检测到BUTTON1_CLICKED
或BUTTON1_DOUBLE_CLICKED
以及类似的事情(尽管您可以通过跟踪BUTTON1_PRESSED
, BUTTON1_RELEASED
以及鼠标事件之间的时间来自行实现)。
虽然有一点需要注意,当我用C测试时,一切正常,除了getmouse
在滚轮向下事件上返回ERR
。 这可能仍然有用,因为它是唯一给出这个结果的事件。 当我在Rust中测试相同的代码时,它工作得很好,所以你的里程可能会有所不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.