鼠标向上滚动(Ncurses / C++)

Posted

技术标签:

【中文标题】鼠标向上滚动(Ncurses / C++)【英文标题】:Mouse scroll Up (Ncurses / C++) 【发布时间】:2017-02-21 00:02:17 【问题描述】:

我的问题是我不知道如何使用 ncurses5 和鼠标事件向下和向上滚动。

我知道这是 ncurses5.6+ 的一个功能,但我不知道我是否可以从打包者那里获得这个版本。

即使我能得到它,zsh、bash、sh 等在每个终端上都能很好地滚动(如何?),这是硬件功能吗?我可以在我的 c++ 程序中获得我自己的库而不添加比 ncurses、c 标准和 std 更多的库吗?

此代码适用于向下滚动,但在我尝试集成 BUTTON5_PRESSED 时无法编译(因为我的 ncurses 版本)。

等等,实际上我可以处理向下滚动,但不能处理向上滚动。有没有办法处理这两者?

 // mouse event structure
  MEVENT event;

  if (getmouse(&event) == OK) 
    printw("mouse Event OK");
    if (event.bstate & BUTTON4_PRESSED)
      wprintw(_win, "Button4\n");
    else if (event.bstate & BUTTON5_PRESSED) // does not compile
      wprintw(_win, "Button5\n");
  

我的实际代码托管在 github https://github.com/Liroo/Nanotekspice/blob/master/lib/cli/mode/NcursesMode.cpp,如果你有动力就去看看吧! (顺便说一句,使用它和这个命令来获取 ncurses 格式:./nanotekspice resources/basics/test.nts c=1 --mode=ncurses

【问题讨论】:

不要垃圾标签。 C 不是 C++ 不是 C! 这种行为可以用 c 和 c++ 编码...我认为我可以同时使用这两个标签 当然,我不会重现这个错误。 @toohonestforthissite 在这种情况下你是不对的。该代码对 C 和 C++ 都有效,最重要的是,同一个包含的库适用于两种语言。在这种情况下使用这两个标签是完全有效的。此外,尽管它是一个 .cpp 示例文件,但我怀疑更多的 C 用户会熟悉 ncurses 【参考方案1】:

简短:不,没有解决方法

长—— 滚轮鼠标(按照惯例)发送 button-4 和 button-5 用于向上/向下事件。 ncurses5 不为这两个按钮提供编码。这是 ncurses6 (August 2015) 的标准扩展(来自 September 2005):

这些说明适用于 2015 年 8 月 8 日发布的 ncurses 6.0。

此版本旨在与 ncurses 5.0 到 5.9 源代码兼容;提供新的应用程序二进制接口 (ABI)。虽然源代码仍然可以配置为支持 ncurses 5 ABI,但发布的目的是提供通常有用但与 ncurses 5 二进制不兼容的扩展:

扩展 cchar_t 结构以允许编码超过 16 种颜色。

修改鼠标状态的编码,为第 5 个鼠标按钮腾出空间。这样就可以将 ncurses 与带有 xterm 或类似 X 终端仿真器的滚轮鼠标一起使用。

进一步阅读:

Symbol-versioning in ncurses

【讨论】:

感谢您的信息,您知道 apt-get / zypper 上是否有支持此功能的 ncurses 包吗? 软件包名称中包含“ncurses6”或“ncurses-6.0”的任何内容。Debian 在测试中已经这样做了大约一年。我不确定 OpenSUSE...

以上是关于鼠标向上滚动(Ncurses / C++)的主要内容,如果未能解决你的问题,请参考以下文章

向上无缝滚动,鼠标放在上面会停止滚动

js如何判断鼠标滚轮是向下还是向上滚动

C语言之贪吃蛇(ncurses)

Kivy 滚动条滚动方向与鼠标

“鼠标中键滚轮向上滚动”这个用英语怎么说?

Bootstrap modal 使用鼠标滚动/触摸板在 Chrome 41 上停止滚动(但适用于向上/向下键)