如何重绘 ncurses 菜单
How to redraw an ncurses menu
我正在开发一个基于 ncurses 的工具,它有 4 个平铺 windows,屏幕底部有一个命令栏。 windows 形成一个 2x2 网格,如下所示:
+----+----------------+
| 1 | 2 |
+----+----------------+
| 3 | 4 |
| | |
| | |
| | |
+----+----------------+
左上角的大小是固定的,所以当应用调整大小时,宽度变化 2 次,高度变化 3 次,双向变化 4 次。
在我开始将菜单(使用 menu.h)放入 window 之前,我的重绘代码工作正常 4。现在,如果我将 window 调整得太小,部分菜单将被截断,但是当您再次将 window 变大时,它不会重新绘制被删除的内容。在重绘代码中执行 post_menu() 不会重绘它。
重新绘制菜单的正确方法是什么?我每次都必须处理它并从头开始重新创建它吗?我的代码中确实有只在必要时重绘的逻辑(数据更改、window 调整大小等),因此它不会无缘无故地在每个周期创建一个新菜单,但这似乎仍然有点笨拙。必须有一种简单的方法来重绘您已经创建的菜单。这是什么?
重新创建结构是最简单的方法。
表单和菜单库使用您键入的键的抽象。该抽象不包括调整大小功能。
您 可以 运行 wresize
菜单中的每个 windows,例如 menu.h
中的这些行
WINDOW *win; /* Window containing menu */
WINDOW *sub; /* Subwindow for menu display */
WINDOW *userwin; /* User's window */
WINDOW *usersub; /* User's subwindow */
但要完成这项工作需要对图书馆进行一些研究。有一个在 ncurses-examples(名为 cardfile
)中调整 form 大小的示例,但没有 menus 的类似示例。
延伸阅读:
我正在开发一个基于 ncurses 的工具,它有 4 个平铺 windows,屏幕底部有一个命令栏。 windows 形成一个 2x2 网格,如下所示:
+----+----------------+
| 1 | 2 |
+----+----------------+
| 3 | 4 |
| | |
| | |
| | |
+----+----------------+
左上角的大小是固定的,所以当应用调整大小时,宽度变化 2 次,高度变化 3 次,双向变化 4 次。
在我开始将菜单(使用 menu.h)放入 window 之前,我的重绘代码工作正常 4。现在,如果我将 window 调整得太小,部分菜单将被截断,但是当您再次将 window 变大时,它不会重新绘制被删除的内容。在重绘代码中执行 post_menu() 不会重绘它。
重新绘制菜单的正确方法是什么?我每次都必须处理它并从头开始重新创建它吗?我的代码中确实有只在必要时重绘的逻辑(数据更改、window 调整大小等),因此它不会无缘无故地在每个周期创建一个新菜单,但这似乎仍然有点笨拙。必须有一种简单的方法来重绘您已经创建的菜单。这是什么?
重新创建结构是最简单的方法。
表单和菜单库使用您键入的键的抽象。该抽象不包括调整大小功能。
您 可以 运行 wresize
菜单中的每个 windows,例如 menu.h
中的这些行
WINDOW *win; /* Window containing menu */
WINDOW *sub; /* Subwindow for menu display */
WINDOW *userwin; /* User's window */
WINDOW *usersub; /* User's subwindow */
但要完成这项工作需要对图书馆进行一些研究。有一个在 ncurses-examples(名为 cardfile
)中调整 form 大小的示例,但没有 menus 的类似示例。
延伸阅读: