ncurses: mvwprintw的替代方法

huangapple go评论62阅读模式
英文:

ncurses: alternative to mvwprintw

问题

我正在寻找替代mvwprintw函数的方法。我的问题是,这个函数会移动光标并将文本放在屏幕上。是否有一种替代方法可以做同样的事情,但不会影响光标位置?

谢谢

英文:

I'm looking for an alternative to the mvwprintw function. My problem is that this function moves the cursor and the puts the text on the screen. Is there an alternative that does the same except it doesn't mess with the cursor position?

Thanks

答案1

得分: 1

你可以继续使用mvprintw,只需将光标移回原来的位置。

/* 记录首次光标位置 */
int x, y;
getyx(win, y, x);

/* 你的原始代码 */
mvwprintw(win, other_y, other_x, "hello");

/* 移回原始位置 */
wmove(win, y, x);

只需注意,getyx 是一个宏,所以你不需要发送地址,但xy将会被赋值。

英文:

You can just use mvprintw as you already are, and just move the cursor back.

/* first record cursor position */
int x,y;
getyx(win, y, x);

/* your original code */
mvwprintw(win, other_y, other_x, "hello");

/* move back to original location */
wmove(win, y, x);

Just note that getyx is a macro so you are not sending an address, but x and y will get assigned.

答案2

得分: 1

正如另一个答案中所提到的,您可以始终使用 getyx(或 getcurxgetcury)和 wmove 来保存和恢复光标位置。

mvwprintw 的作用就像调用了 wmove 并(成功时)wprintw,它也移动了光标:

> printwwprintwmvprintwmvwprintw 程序类似于 printf [参见 printf(3)]。实际上,通过 printf 输出的字符串被输出,就好像在给定窗口上使用了 waddstr

因为 waddstr 的作用就像调用了 waddch。还有一组与 waddstr 相对应的函数,它们不移动光标,即 waddchstr,但对于这种情况,没有不移动的 wprintwwaddch 对应项。因此,在 curses 库中,保存/恢复光标是执行所需操作的唯一方式。

英文:

As noted in another answer, you can always save and restore the cursor position using getyx (or getcurx, getcury) and wmove.

mvwprintw acts as if it calls wmove and (on success) wprintw, which also moves the cursor:

>The printw, wprintw, mvprintw and mvwprintw routines are analogous to
printf [see printf(3)]. In effect, the string that would be output by
printf is output instead as though waddstr were used on the given window.

because waddstr acts as if it calls waddch. There is another set of functions corresponding to waddstr which do not move the cursor, i.e., waddchstr, but there is no counterpart/non-advancing wprintw and waddch for that case. So saving/restoring the cursor is the only way in the curses library for doing what is asked.

huangapple
  • 本文由 发表于 2023年2月24日 05:12:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/75550367.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定