[英]Issue with printing sub-menu in ncurses with c++
我正在尝试打印与 ncurses 显示的主菜单关联的子菜单。 这是我组织它的方式:
不幸的是,我无法通过第二步,子菜单从未出现在屏幕上。
#include <ncurses.h>
#include <iostream>
#include <string>
int main()
{
std::string nameMainMenuExample = "/parent1/folder";
std::string nameSubMenuExample = "/folder/file";
// initialize ncurses
WINDOW *win;
win = initscr();
raw();
curs_set(0);
cbreak();
box(win, 0, 0);
refresh();
wrefresh(win);
keypad(win, true);
// end initialize ncurses
int highlight = 0;
int choice;
// PRESS 'a' to ESCAPE LOOP
do {
mvwprintw(win, 1, 1, nameMainMenuExample.c_str());
switch (choice) {
case KEY_UP:
--highlight;
if (highlight == -1) {
highlight = 0;
}
break;
case KEY_DOWN:
++highlight;
if (highlight == 1) {
highlight = 0;
}
break;
case KEY_ENTER: // Enter key pressed
clear();
mvwprintw(win, 1, 1, nameSubMenuExample.c_str());
refresh();
break;
default:
break;
}
} while ((choice = wgetch(win)) != 97); // random choice a == 97
endwin();
return 0;
}
我只是希望在 ncurses 清除主菜单的屏幕后,子菜单会打印在屏幕上。 谢谢
如果你想在 enter 键上激活子菜单,你应该检查KEY_ENTER
根据wgetch
返回的值(在数字上类似于 16777221),而不是 10。
您正在混合对不同窗口的调用( clear
和refresh
使用stdscr
),而您的wgetch
调用使用的是获取自己的wrefresh
。 由于菜单窗口没有被刷新,它永远不会出现,并且由于wgetch
做了一个wrefresh
,这可能会另外模糊一些东西。
首先使wrefresh
调用应用于您要重新绘制的窗口。
在 C++ 中使用ncurses
,ENTER 键值只是'\n'
例如:
case '\n':
clear();
mvwprintw(win, 1, 1, nameSubMenuExample.c_str());
refresh();
break;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.