关于C#:如何重绘ncurses菜单

How to redraw an ncurses menu

我正在使用一个基于ncurses的工具,该工具具有4个平铺的窗口,并且在屏幕底部有一个命令栏。窗口形成一个2x2的网格,如下所示:

1
2
3
4
5
6
7
8
+----+----------------+
| 1  |  2             |
+----+----------------+
| 3  |  4             |
|    |                |
|    |                |
|    |                |
+----+----------------+

左上角的大小是固定的,因此,调整应用大小时,宽度会改变2个,高度会改变3个,两个方向都会改变4个。

在开始将菜单(使用menu.h)放入窗口4之前,我的重绘代码工作正常。现在,如果我将窗口的尺寸调整得太小,则菜单的一部分将被切断,但是当您制作窗口时再大一点,它不会重新绘制已删除的内容。在重绘代码中执行post_menu()不会重绘它。

重新绘制菜单的正确方法是什么?我是否必须处理它并每次从头开始重新创建它?我的代码中确实有逻辑,仅在必要时重新绘制(更改数据,调整窗口大小等),因此它不会无缘无故地在每个周期创建一个新菜单,但这似乎有点繁琐。必须有一种简单的方法来重新绘制您已经创建的菜单。是什么?


重新创建结构是最简单的方法。

表单和菜单库使用您键入的键的抽象。该抽象不包括调整大小功能。

您可以为菜单中的每个窗口运行wresize,例如,menu.h

中的这些行

1
2
3
4
  WINDOW        *win;                   /* Window containing menu          */
  WINDOW        *sub;                   /* Subwindow for menu display      */
  WINDOW        *userwin;               /* User's window                   */
  WINDOW        *usersub;               /* User's subwindow                */

但是要进行这项工作需要对图书馆进行一些研究。有一个示例可以在ncurses-examples(命名为cardfile)中调整窗体的大小,但是菜单没有类似的示例。

进一步阅读:

  • wresize-调整诅咒窗口的大小
  • is_term_resizedresize_termresizeterm-更改
    诅咒终端的大小