当前位置: 技术问答>linux和unix
关于类中使用CURSES的问题.请求帮助
来源: 互联网 发布时间:2015-01-06
本文导语: 我在main函数中初始化initscr和最后endwin 在main中调用类的成员函数,这个成员函数在 主窗口绘制上绘制子窗口和文本,如果不使用颜色 那还是正常的,可是我想在子窗口中使用颜色表示 这样我发现必须在main中初始化颜色...
我在main函数中初始化initscr和最后endwin
在main中调用类的成员函数,这个成员函数在
主窗口绘制上绘制子窗口和文本,如果不使用颜色
那还是正常的,可是我想在子窗口中使用颜色表示
这样我发现必须在main中初始化颜色函数:
start_color
init_pair
和颜色选取函数attron才能使得子窗口中的颜色输出正常
如果在子窗口中使用上面的函数,或在子窗口中使用attron函数
选取颜色都不行,为什么?谢谢
在main中调用类的成员函数,这个成员函数在
主窗口绘制上绘制子窗口和文本,如果不使用颜色
那还是正常的,可是我想在子窗口中使用颜色表示
这样我发现必须在main中初始化颜色函数:
start_color
init_pair
和颜色选取函数attron才能使得子窗口中的颜色输出正常
如果在子窗口中使用上面的函数,或在子窗口中使用attron函数
选取颜色都不行,为什么?谢谢
|
这是我写的一个小例子,注意如果用getch而不是wgetch的话,焦点就切到stdscr,win的显示就会被遮盖。你可以体会一下下面的代码:
getch();
touchwin(win->win);
wrefresh(win->win);
wgetch(win->win);
=============
#include
#define WIN_BACK_COLOR 4
class Win{
private:
int x, y, w, h, fColor, bColor;
public:
WINDOW* win;
Win(int x0, int y0, int w0, int h0){
x=x0; y=y0; w=w0; h=h0;
win = newwin(h, w, y, x);
}
~Win(){
delwin(win);
}
void SetColor(int f, int b){
fColor = f;
bColor=b;
}
void Show();
};
void Win::Show()
{
init_pair(WIN_BACK_COLOR, fColor, bColor);
wattron(win, COLOR_PAIR(WIN_BACK_COLOR));
//move(y, x);
box(win, ACS_VLINE, ACS_HLINE);
mvwaddstr(win, 1, 1, "Hello, world");
wrefresh(win);
wgetch(win);
}
int main(int argc, char* argv[]){
initscr();
start_color();
Win* win = new Win(15, 10, 40, 10);
win->SetColor(COLOR_WHITE, COLOR_BLUE);
win->Show();
delete win;
endwin();
return 0;
}
getch();
touchwin(win->win);
wrefresh(win->win);
wgetch(win->win);
=============
#include
#define WIN_BACK_COLOR 4
class Win{
private:
int x, y, w, h, fColor, bColor;
public:
WINDOW* win;
Win(int x0, int y0, int w0, int h0){
x=x0; y=y0; w=w0; h=h0;
win = newwin(h, w, y, x);
}
~Win(){
delwin(win);
}
void SetColor(int f, int b){
fColor = f;
bColor=b;
}
void Show();
};
void Win::Show()
{
init_pair(WIN_BACK_COLOR, fColor, bColor);
wattron(win, COLOR_PAIR(WIN_BACK_COLOR));
//move(y, x);
box(win, ACS_VLINE, ACS_HLINE);
mvwaddstr(win, 1, 1, "Hello, world");
wrefresh(win);
wgetch(win);
}
int main(int argc, char* argv[]){
initscr();
start_color();
Win* win = new Win(15, 10, 40, 10);
win->SetColor(COLOR_WHITE, COLOR_BLUE);
win->Show();
delete win;
endwin();
return 0;
}