在ncurses中进行窗口定位

4
我正在尝试使用ncurses在C语言中编写一个简单的聊天应用程序,我之前只了解PHP。(是的,我知道。谢谢。我会牢记这个建议,请放下枪支。)
我尝试创建两个窗口,一个用于输入,一个用于频道文本,如下所示:
int termwidth = getmaxy(stdscr);
int termheight = getmaxx(stdscr);

WINDOW *channel = newwin(termwidth, termheight - 1, 0, 0);
scrollok(channel, TRUE);

WINDOW *input = newwin(termwidth, 1, termheight + 1, 0);
scrollok(input, TRUE);

然后将光标位置设置为输入框:

wmove(input, 0, 0);

为了将输入内容放在第二个窗口中,该窗口应占据终端底部的单独一列,而输出则出现在填充终端其余空间的第一个窗口中。 输出似乎正确地填充顶部窗口(通道),并且输入光标在正确位置闪烁,但更改其大小不会产生可预测的结果,并且键入的输入似乎根本没有进入输入窗口。 可以在此处找到完整的源代码:http://pastebin.com/X8apHUgh。总之,我想知道为什么输入行为出现意外情况,并且为什么绘制“通道”窗口会产生奇怪的结果。
1个回答

4

哦,[删除的脏话]!我是个笨蛋。结果发现我的问题有两个:

  1. 我不小心混淆了X和Y的赋值;
  2. 在函数中,我也颠倒了宽度和高度参数。

这意味着定位工作正常,直到我对基本定位数学做出某些假设。

需要补充说明的是,部分原因是我在考虑终端定位时采用了X/Y位置的思路,而实际上行/列是已经建立的范例。它们只有部分等效。

自己给自己慢慢鼓掌


对于ncurses我也是新手,如果我拥有一枚镍币,每当我混淆x和y时就会得到一枚...在深入搜索斑马蹄声源之前,始终检查这些错误是一个明智的建议。 - J.M. Janzen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接