我想在没有边框的ncurses中制作1x8单元格。我做的第一件事是制作一个窗口
WINDOW*win = newwin(height, width, 0, 0);
高度为24,宽度为80.我想制作一个列标题和一个行标题。在列中我想要字符串' A'到了我'在排队中我想要字符串' 1'至' 23'这意味着所有单元格都是高度1和宽度8,并且位置(0,0)是空单元格。我希望标题中的每个单元格都具有属性STANDOUT
。所以我写了一个函数DrawCell()
。这就是我试过的
void DrawCell(int x , int y, const char* ch){
clear();
wattron(win, A_STANDOUT);
mvwprintw(win, x,y,ch);
wrefresh(win);
getchar();
endwin();
}//DrawCell
问题是这个功能只显示字符串' ch'在STANDOUT
。但是我无法弄清楚如何将这个字符串放在高度为1和宽度为8的单元格中。
答案 0 :(得分:0)
鉴于描述,听起来好像你想要像
这样的东西#define CELL_WIDE 8
#define CELL_HIGH 1
void DrawCell(int col , int row, const char* ch) {
int y = row * CELL_HIGH;
int x = col * CELL_WIDE;
wattron(win, A_STANDOUT);
wmove(win, y, x); // tidier to be separate...
wprintw("%*s", " "); // fill the cell with blanks
wprintw("%.*s", CELL_WIDE, ch); // write new text in the cell
wrefresh(win);
#if 0
getchar();
endwin();
#endif
}//DrawCell
因为您必须将单元格的行和列位置转换为x和y坐标。
一些注意事项:
我是否已经调用getchar
,因为这似乎是您用于调试的内容。
如果您要绘制大量单元格,则还应将wrefresh(win)
移出此功能,例如,将其移动到刷新整个窗口的位置。
为了避免清除窗口,您应该使用wgetch(win)
而不是getch()
,因为后者会刷新stdscr
,并且可能会覆盖您的窗口。
如果功能更改为
,则发表评论void DrawCell(int col , int row, const char* ch) {
int y = row * CELL_HIGH;
int x = col * CELL_WIDE;
wmove(win, y, x); // tidier to be separate...
wprintw("%*s", " "); // fill the cell with blanks
wattron(win, A_STANDOUT);
wprintw("%.*s", CELL_WIDE, ch); // write new text in the cell
wattroff(win, A_STANDOUT);
wrefresh(win);
#if 0
getchar();
endwin();
#endif
}//DrawCell
然后只有单元格的文本以突出模式显示。