ncursesw 导致奇怪的行为
ncursesw causing weird behaviour
在 WSL2 上,我使用本教程网站中给出的第一个示例代码:https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/panels.html。
代码:
#include <panel.h>
int main()
{ WINDOW *my_wins[3];
PANEL *my_panels[3];
int lines = 10, cols = 40, y = 2, x = 4, i;
initscr();
cbreak();
noecho();
/* Create windows for the panels */
my_wins[0] = newwin(lines, cols, y, x);
my_wins[1] = newwin(lines, cols, y + 1, x + 5);
my_wins[2] = newwin(lines, cols, y + 2, x + 10);
/*
* Create borders around the windows so that you can see the effect
* of panels
*/
for(i = 0; i < 3; ++i)
box(my_wins[i], 0, 0);
/* Attach a panel to each window */ /* Order is bottom up */
my_panels[0] = new_panel(my_wins[0]); /* Push 0, order: stdscr-0 */
my_panels[1] = new_panel(my_wins[1]); /* Push 1, order: stdscr-0-1 */
my_panels[2] = new_panel(my_wins[2]); /* Push 2, order: stdscr-0-1-2 */
/* Update the stacking order. 2nd panel will be on top */
update_panels();
/* Show it on the screen */
doupdate();
getch();
endwin();
}
当我 运行 带有标志 -lpanel -ncurses
的代码时,它工作正常,如下所示:
当我 运行 带有标志 -lpanel -ncursesw
的代码时,它不能正常工作:
例子说明了两个问题:
- 将
-lpanel
与 -lncursesw
混合使用(不会起作用,因为包含字符和属性的类型的大小不同)。
- 你应该使用
-lpanelw
.
- 没有调用
setlocale
来使画线工作可移植。
在 WSL2 上,我使用本教程网站中给出的第一个示例代码:https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/panels.html。
代码:
#include <panel.h>
int main()
{ WINDOW *my_wins[3];
PANEL *my_panels[3];
int lines = 10, cols = 40, y = 2, x = 4, i;
initscr();
cbreak();
noecho();
/* Create windows for the panels */
my_wins[0] = newwin(lines, cols, y, x);
my_wins[1] = newwin(lines, cols, y + 1, x + 5);
my_wins[2] = newwin(lines, cols, y + 2, x + 10);
/*
* Create borders around the windows so that you can see the effect
* of panels
*/
for(i = 0; i < 3; ++i)
box(my_wins[i], 0, 0);
/* Attach a panel to each window */ /* Order is bottom up */
my_panels[0] = new_panel(my_wins[0]); /* Push 0, order: stdscr-0 */
my_panels[1] = new_panel(my_wins[1]); /* Push 1, order: stdscr-0-1 */
my_panels[2] = new_panel(my_wins[2]); /* Push 2, order: stdscr-0-1-2 */
/* Update the stacking order. 2nd panel will be on top */
update_panels();
/* Show it on the screen */
doupdate();
getch();
endwin();
}
当我 运行 带有标志 -lpanel -ncurses
的代码时,它工作正常,如下所示:
当我 运行 带有标志 -lpanel -ncursesw
的代码时,它不能正常工作:
例子说明了两个问题:
- 将
-lpanel
与-lncursesw
混合使用(不会起作用,因为包含字符和属性的类型的大小不同)。 - 你应该使用
-lpanelw
. - 没有调用
setlocale
来使画线工作可移植。