我很難試着讓wgetch
在移動和調整大小後從窗口讀取數據。ncurses:在移動/調整窗口大小之後wgetch無法正確讀取
輸入後,我將窗口向上移動並將其高度增加1。然後我清除窗口並將數據寫回到它。問題是我在執行wgetch
(或mvwgetch
)時,在將窗口向上移動之前,它將輸入光標置於前一個位置。
這裏是我的代碼:
#include <ncurses.h>
int main() {
WINDOW *win=initscr();
int y,x,i=1;
getmaxyx(win, y, x);
//creates a sub windows 1 col high
WINDOW *child=derwin(win, i, x, y-i, 0);
//doc says to touch before refresh
touchwin(win);
//print to child
waddstr(child, "hello");
wrefresh(child);
wrefresh(win);
noecho();
while(wgetch(child)!='q') {
++i;
mvderwin(child, y-i, 0);
wresize(child, i, x);
touchwin(win);
wclear(child);
waddstr(child,"hello");
wrefresh(child);
wrefresh(win);
}
delwin(child);
delwin(win);
endwin();
}
這裏所說的「你好」就動起來不如預期,但是,輸入光標是在錯誤的地方。使用mvwgetch
仍然會導致相同的問題。 cbreak()
,noecho()
和scrollok(child)
也似乎沒有幫助。
感謝
編輯:更新後的版本更好的顯示http://liveworkspace.org/code/31DruQ $ 0
這是編譯爲C或C++嗎?你使用什麼編譯選項?你說'輸入光標在錯誤的地方'什麼是「錯誤」的地方?它在哪裏,你會期望它在哪裏? – Mike 2013-02-19 14:08:05
@Mike,代碼編譯並向C或C++編譯器提出同樣的問題,它將要進入的項目是C++。我的意思是錯誤的地方,就是說,如果我從0,0到10,10移動一個派生窗口,然後窗口重新繪製在它的舊地方0,0。 – 111111 2013-02-19 14:30:37
PS:我不認爲在適當的地方創建一個窗口等同於移動框架,除非它可以表明我誤解了wresize和mvderwin應該做的事情。 – 111111 2013-02-19 14:35:09