Ncurses box()函数仅适用于之前的getch()

时间:2014-02-12 22:39:16

标签: c++ user-interface ncurses

我得到一个非常奇怪的“错误”我想你可以称之为。我正在使用xcode开发一个简单的游戏,并希望添加一些简单的图形。

为此,我决定使用ncurses库。 在学习如何使用curses时,我开始讨论创建窗口,我将在稍后使用的功能之一(可能用于健康栏或其他东西)是围绕框()中的窗口的box()函数。我做的简单测试是在strscr窗口的中心创建一个新窗口,然后在其上调用box()。代码如下:

WINDOW *AboutWindow;
int width=60,height=12;
int OffsetX=0,OffsetY=0;
OffsetX = (getmaxx(stdscr) - width) / 2;
OffsetY = ((getmaxy(stdscr) - height) / 2);
AboutWindow = newwin(height, width, OffsetY, OffsetX);
getch();
box(AboutWindow, 0, 0);
//getch();
wrefresh(AboutWindow);

奇怪的“bug”是只有在我调用box()函数之前调用getch()时才会绘制框。如果我注释掉getch(),则框不会被绘制。

我完全不知道为什么会这样。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

好的,我知道这个问题已经过时了,但对于将来的参考: 有办法让它发挥作用。

在这里阅读了关于ncurses的教程http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO后,我想知道如果你printw()然后getch()你不必运行refresh()是怎么回事。我认为它是在getch()中调用的,它会刷新stdscr,它会覆盖任何其他窗口的输出。

因此,为了让窗口保持在屏幕上并获得键盘输入,您必须使用wgetch(WINDOW*)

您的代码看起来像这样:

WINDOW *AboutWindow;
int width=60,height=12;
int OffsetX=0,OffsetY=0;
OffsetX = (getmaxx(stdscr) - width) / 2;
OffsetY = ((getmaxy(stdscr) - height) / 2);
AboutWindow = newwin(height, width, OffsetY, OffsetX);
box(AboutWindow, 0, 0);
wgetch(AboutWindow); //also invokes wrefresh()

答案 1 :(得分:0)

在与Windows相关的任何功能之前调用refresh()

我不知道为什么,但是可以。

答案 2 :(得分:-1)

好吧,经过一个小时的小提琴发现,你可以做很多事情来摆脱getch(),据我所知(这在任何方面都不是很广泛!),但要得到它以便你不必每次都按一个按钮来越过那行代码,你在它上面放了一个halfdelay()时间,下面的代码工作得很好。

WINDOW *AboutWindow;
int width=60,height=12;
int OffsetX=0,OffsetY=0;
OffsetX = (getmaxx(stdscr) - width) / 2;
OffsetY = ((getmaxy(stdscr) - height) / 2);
AboutWindow = newwin(height, width, OffsetY, OffsetX);
halfdelay(1);
getch();
box(AboutWindow, 0, 0);
wrefresh(AboutWindow);
  • 请注意,要退出halfdelay模式,请调用cbreak()函数。