在没有边框的ncurses中制作1x8单元格

时间:2016-03-26 15:00:44

标签: c++ ncurses

我想在没有边框的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的单元格中。

1 个答案:

答案 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,并且可能会覆盖您的窗口。

    < / LI>

如果功能更改为

,则发表评论
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

然后只有单元格的文本以突出模式显示。