РЕДАКТИРОВАТЬ 2:
, как и предполагалось, решение было скрыто на виду. Спасибо @hyde за не только полезный ответ, но и тот, который научил меня чему-то, чего я раньше не знал.
РЕДАКТИРОВАТЬ:
Я думал, что было бы полезно добавить небольшой контекст, но, возможно, это только вызвало некоторое неправильное направление. Я уверен, что решение простое и прямо под моим носом.
У меня есть функция:
cursorPosition(int y, int x)
{
getyx(_win, y, x);
}
Я хочу, чтобы эта функция изменяла y и x, чтобы она содержала позицию курсора _win
, объекта окна.
он постоянно возвращает y = 0, x = 0.
Мой вопрос: чего мне не хватает?
Я оставлю оставшуюся часть поста без изменений. Но вам не нужно go дальше.
- конец передачи -
У меня есть объект класса, который использует библиотеку ncurses, и я пытаюсь чтобы получить позицию курсора на экране.
Я ясно вижу, что курсор перемещается, когда я вызываю wmove
и wprintw
методы в окне, но когда я проверяю позицию курсора, он читает y = 0, x = 0. Я не могу понять, почему он не получит фактическую позицию курсора. getyx(stdscr,y,x )
и getsyx(y,x)
, кажется, работают нормально, которые оба используют stdscr, но мне нужно использовать новое окно, а не окно stdscr.
вот некоторые (соответствующие) подробности моего кода:
Я создаю класс с именем Window
.
Window - это оболочка для объекта окна ncurses, с методами для печати и изменения этого окна:
class Window
{
public:
// if int is 1: calls initscr and creates a newwin to assign to member variable 'win'
// if int is 0: calls delwin, sets member variable '_win' to nullptr then endwin
setWin(int)
// calls setWin(0) if member variable '_win' is not already nullptr
~Window()
// retrieves the cursor position
cursorPosition(int y, int x)
private:
WINDOW * _win = nullptr;
}
ЗДЕСЬ проблема :
cursorPosition просто оборачивается вокруг '' 'getyx (_win, y, x)' '', используя закрытую переменную-член '' '_win' ''. Позже я создам общий указатель на этот оконный объект с именем DISPLAY
, и я делаю это:
DISPLAY->setWin(1);
int CURSOR_Y, CURSOR_X;
DISPLAY->cursorPosition(CURSOR_Y, CURSOR_X);
std::string yx = std::tostring(CURSOR_Y) + " " + std::to_string(CURSOR_X);
// prints to '_win' with 'wprintw'.
DISPLAY->print(yx)
однако я всегда получаю обратно
"0 0"
И действительно, это действительно так, потому что когда я пытаюсь перемещаться по окну CURSOR_Y и CURSOR_X, все, что я выводил, находится в верхнем левом углу.