【问题标题】:Why aren't my windows being displayed? (Ncurses)为什么我的窗口不显示? (诅咒)
【发布时间】:2018-06-08 15:26:49
【问题描述】:

我正在尝试创建这个程序,我在 stdscr 上并排打印两个窗口。我创建了“菜单”类来在一个地方声明整个屏幕的所有内容,我在 main 中创建了一个“菜单”对象(“menu_principal”),但没有任何反应。我添加了两个函数来查看是否正在创建我的对象。

为什么不显示窗口?

这是“菜单”类:

class menu{
public:
  menu(int row, int col){

    display = newwin((row-4), (col/2), 2, 0);
    getmaxyx(display, drow, dcol);

    help = newwin((row-4), (col/2), 2, (col/2));
    getmaxyx(help, hrow, hcol);

    refresh();

    box(display, 0, 0);
    wrefresh(display);

    box(help, 0,0);
    wrefresh(help);
    refresh();
  }

  int prueba1(){
    return (this->drow);
  }
  int prueba2(){
    return (this->hrow);
  }
private:
  int y, x, drow, dcol, hrow, hcol;
  WINDOW * display;
  WINDOW * help;



};

这是主要的一部分:

int main(int argc, char const *argv[]) {
  int row=0, col=0;
  initscr();
  refresh();
  cbreak();
  getmaxyx(stdscr, row, col);

  menu* menu_principal = new menu(row, col);
  refresh();

  cout << row;
  cout << menu_principal->prueba1();
  cout << menu_principal->prueba2();

【问题讨论】:

    标签: c++ linux ncurses


    【解决方案1】:

    普通的 refresh() 调用会覆盖特定于窗口的 wrefresh(display)wrefresh(help)。如果示例完整,有人可以指出执行此操作的特定代码行。

    cout 调用没有多大帮助:您应该将该信息写入文件而不是屏幕)。

    【讨论】:

    • 谢谢,我将 refresh() 调用移到了更好的地方,但这不是问题。我意识到我并没有指示程序在关闭之前等待,所以我添加了一个“int c = getch()”语句并解决了它。相当愚蠢的错误。
    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 2013-06-10
    • 2014-04-22
    • 2012-03-28
    • 2013-11-13
    • 2021-06-27
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多