0

我在标准屏幕上创建了 3 个窗口,具有屏幕宽度列和一行高度:

WINDOW* pWindow = newwin(0, COLS - 1, windowNr, 0); // windowNr 0 - 2

通常呈现为连续窗口:

----------------------------0 Window----------------------------
----------------------------1 Window----------------------------
----------------------------2 Window----------------------------

我的问题是在最后一个创建的窗口下我想要一个我创建的垫:

WINDOW* pPad = newpad(LINES - 3, COLS - 1); // 3 because of the three pWindows

pad最重要的是呈现pWindows

----------------------------0 Pad----------------------------
----------------------------0 Pad----------------------------
----------------------------0 Pad----------------------------

如何将焊盘放置在输出的最后一个窗口下方:

----------------------------0 Window----------------------------
----------------------------1 Window----------------------------
----------------------------2 Window----------------------------
------------------------------0 Pad-----------------------------
------------------------------0 Pad-----------------------------
------------------------------0 Pad-----------------------------

不幸的newpad是,没有(y,x)坐标newwin。为了简单地用调试内容填充焊盘,我这样做:

werase(pPad); // Clear window, https://invisible-island.net/ncurses/man/curs_clear.3x.html
wmove(pPad, 0, 0); // Moves cursor in pad to y,x

for(int c = 0; c < 40; c++){
    string s = to_string(c) + ".\n";
    wprintw(pPad, s.c_str());
}

prefresh(pPad, 0, 0, 0, 0, maxRows, maxCols);

我还在 中添加了不同的值prefresh,它的视口滚动或者更确切地说刷新可以完美地工作,如文档中所述。

4

1 回答 1

1

我将pad内容保存在内存中并仅将一个窗口呈现为:

----------------------------0 Window----------------------------
----------------------------1 Window----------------------------
----------------------------2 Window----------------------------
----------------------------3 Window----------------------------
----------------------------3 Window----------------------------
----------------------------3 Window----------------------------

这可以模拟一个垫子,因为3 Window只有我的数据的观点被渲染为线条。可以通过更改我的数据结构中的范围或索引来模拟滚动,3 Window如果选择了一行,则仅重新渲染一行,如果向内滚动或减小内存视口索引,则重新渲染整个窗口。这种方式模拟了一个垫子,我避免了不同的 ncurses 调用prefresh, pnoutrefresh, pechochar等,并且只能使用 window, wrefresh, 调用。例如,向下滚动会改变:

----------------------------3 Window-index 0--------------------
----------------------------3 Window-index 1--------------------
----------------------------3 Window-index 2--------------------

----------------------------3 Window-index 1--------------------
----------------------------3 Window-index 2--------------------
----------------------------3 Window-index 3--------------------

等等等等。在 ncurses API 中,windows 接缝具有更多功能,我也可以使用所有这些功能,而不是pads现在使用可能会受到未来的限制。

我敢肯定,ncurses 的作者有他的理由,但我只会制作一个带有一个带有标志的窗口类型的 ncurses API 来启用 pad 功能。垫缝不必要地笨重并且减少到我。

于 2019-05-29T05:34:47.277 回答