Ncurses将光标放在正确的面板中

时间:2017-03-06 20:02:09

标签: c++ ncurses

我正在创建一个具有多个窗口的应用程序,每个窗口都包含在一个面板中。其中一个窗口尤其必须从键盘输入。我还需要能够检测特殊键,如F键和箭头键。我目前的应用是这样做的。但是,即使我调用wmove(my_wins[1], 3, 2)后光标也不在正确的位置。

如何将光标移动到适当位置的适当面板?我希望终端光标位于我的第二个窗口(my_wins[1]),在我想要从中获取字符的下一个空白区域。在这种情况下,这是在输入到该行的最后一个字符之后的第{3}行。{/ p>

我的代码:

my_wins[1]

1 个答案:

答案 0 :(得分:1)

您的示例会在更新前将wmove放入屏幕。这些更新将光标留在更新屏幕时最小光标移动的任何位置。

此更改显示了如何执行您要求的操作:

$ diff -u foo.c.orig foo.c
--- foo.c.orig  2017-03-06 18:56:26.000000000 -0500
+++ foo.c       2017-03-06 19:00:03.568868347 -0500
@@ -33,6 +33,7 @@
     std::string str = "";
     std::vector<std::string> cmds;

+    wmove(my_wins[1], 3, 2+str.size()); 
     while ((ch = wgetch(my_wins[1])) != KEY_F(1))
     {   
         switch(ch)
@@ -56,9 +57,9 @@
         }
         clear_win1();
         mvwprintw(my_wins[1], 3, 2, "%s", str.c_str());
-        wmove(my_wins[1], 3, 2+str.size()); 
         update_panels();
         doupdate();
+        wmove(my_wins[1], 3, 2+str.size()); 
     }
 }