ncurses newwin()和mvwin()没有按预期运行

时间:2017-03-16 18:51:42

标签: c++ linux ncurses

我正在使用ncurses在C ++中开发应用程序,但newwin()和mvwin()函数都没有按预期工作。每当我提供这些函数参数值中的任何一个以试图创建一个与初始终端窗口大小不同的新窗口时,似乎没有任何事情发生。例如,以下代码应在位置(10,10)创建一个高度为50,宽度为10的新窗口。这似乎都没有发生:

#include <ncurses.h>
#include <iostream>

using namespace std;

int main(){
  initscr();

  WINDOW * win = newwin(50,10,10,10);
  wrefresh(win);

  getch();
  endwin();
  return 0;
}

从我读过的文档中可以看出,如果传递给它的任何参数都是无效值,那么将创建一个带有默认大小和位置的窗口,但据我所知,所有这些都是有效值。 newwin()不能像我认为的那样工作吗?提前谢谢

2 个答案:

答案 0 :(得分:1)

这个问题询问mvwin,但这不会创建窗口,也没有问题调用问题的例子。

对于newwin,零参数是专门处理的,而不是&#34;无效值&#34;。问题显示了一个明显有效的呼叫(并且在快速检查中,它按预期运行)。

然而,OP很可能会混淆没有输出。这是因为程序创建了一个窗口,该窗口为空,然后从标准屏幕读取。

这个改变的程序通过在新窗口上绘制一个框然后从该窗口读取(阻止与wrefresh关联的getch在新窗口上绘画)来产生输出:

#include <ncurses.h>
#include <iostream>

using namespace std;

int main(){
  initscr();

  WINDOW * win = newwin(50,10,10,10);
  box(win,0,0);
  wrefresh(win);

  wgetch(win);
  endwin();
  return 0;
}

答案 1 :(得分:0)

听起来这对ncurses的功能有些误解。

您提到“试图制作一个大小与初始终端窗口不同的新窗口”-如果您的意思是终端模拟器运行在X / OSX / Windows之类的窗口系统中,那不是ncurses所做的。 ncurses中的“窗口”是现有终端中的一个矩形,可以独立更新/刷新。

这可能就是为什么其他答案的评论似乎互相交谈的原因。