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()不会重绘它。
重新绘制菜单的正确方法是什么?我是否必须处理它并每次从头开始重新创建它?我的代码中确实有逻辑,仅在必要时重新绘制(更改数据,调整窗口大小等),因此它不会无缘无故地在每个周期创建一个新菜单,但这似乎有点繁琐。必须有一种简单的方法来重新绘制您已经创建的菜单。是什么?
重新创建结构是最简单的方法。
表单和菜单库使用您键入的键的抽象。该抽象不包括调整大小功能。
您可以为菜单中的每个窗口运行
中的这些行
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(命名为
进一步阅读:
-
wresize -调整诅咒窗口的大小 -
is_term_resized ,resize_term ,resizeterm -更改
诅咒终端的大小