0
ncursesでスクロールする方法については多くの質問がありますが、明確な答えは見つかりませんでした。だから、私の場合です。私は2つの部分、分割画面のように画面を二等分する2つのWINDOW *オブジェクトを持っています。今私はファイルマネージャのような私のアプリの部分を実装しています。最初のウィンドウはファイル名を保持し、2番目のウィンドウはカレントディレクトリのファイルの拡張子を保持します。私はそれをスクロール可能にしたいと思います。パッドで実現できることを知っています。唯一の手がかりは、thisです。このアプローチを使用して私の試してみましょう:ncursesを使ってスクロールを実装する方法は?
WINDOW *win1, *win2;
int maxx, maxy, halfx;
getmaxyx(stdscr, maxy, maxx);
halfx = maxx >> 1;
win1 = newpad(maxy, halfx);
wprintw(win1, "File name: \n");
wrefresh(win1);
//don't pay much attention on this part of
//code, now it's just a window, then it will be pad too
win2 = newwin(maxy, halfx, 0, halfx);
wprintw(win2, "Extension: \n");
wrefresh(win2);
curs_set(0);//cursor off
int rowcount = 0;
//filling the windows with file data
for(directory_iterator beg(dir); beg != directory_iterator{}; ++beg)
{
wprintw(win1, "%s\n", beg->path().stem().string().c_str());
wrefresh(win1);
wprintw(win2, "%s\n", beg->path().extension().string().c_str());
wrefresh(win2);
rowcount++;
}
//##############################
keypad(win1, TRUE);//SOLUTION
//##############################
int mypadpos = 0;
prefresh(win1, mypadpos, 0, 0, 0, maxy, maxx);
//spaghetti-code from the above question that I tried to adapt
while ((ch = wgetch(win1)) != 'q')
{
switch (ch)
{
case KEY_UP:
if (mypadpos >= 0)
mypadpos--;
prefresh(win1, mypadpos, 0, 0, 0, maxy, maxx);
break;
case KEY_DOWN:
if (mypadpos <= rowcount+1)
mypadpos++;
prefresh(win1, mypadpos, 0, 0, 0, maxy-1, maxx);
break;
}
}
問題は、コードの最後の部分はまったく機能しません。