Положение в ncurses планшет под окном в c ++ - PullRequest
0 голосов
/ 27 мая 2019

Я создаю 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, его прокрутка в окне просмотра или, скорее, обновление прекрасно работает, как описано в документации.

1 Ответ

0 голосов
/ 29 мая 2019

Я храню содержимое pad в памяти и отображаю только одно окно в виде:

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

Это позволяет имитировать пэд, поскольку в 3 Window только точка обзора моих данных отображается в виде линий,Прокрутка может быть смоделирована путем изменения диапазона или индекса в моей структуре данных и повторного отображения только одной строки 3 Window, если выделена строка, и всего окна, если прокрутка увеличивает или уменьшает индекс области просмотра памяти.Таким образом, имитируется пэд, и я избегаю различных вызовов ncurses, таких как prefresh, pnoutrefresh, pechochar и т. Д., И могу использовать только вызовы окон, 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--------------------

и так далее и так далее.В API ncurses, в Windows шве, чтобы иметь больше возможностей, я могу использовать их все также вместо возможных будущих ограничений, используя pads сейчас.

Я уверен, что у автора ncurses были свои причины, но я только сделал бы API ncurses с одним типом окна с флагом, чтобы включить функциональность панели.Прокладки шва излишне громоздки и сводятся ко мне.

...