ncurses 프로그래밍 예제에서요 sub윈도우 하나만 없애는 방법..
글쓴이: mirr242 / 작성시간: 월, 2004/05/24 - 10:16오후
ncurses 에서요 인터넷에 있던 예제를 공부하려고 제가 소스를 좀 바꿔봤는데요...
프로그램을 컴파일 해서 실행하고
a ---- '이름'에서 enter ----- 이름입력하고 enter ------- 열려있던 윈도우가 모두 종료
궁금한 점은 메인 윈도우에서 새로운 윈도우1을 만들고 이 윈도우1에서
윈도우 2를 생성한다고 했을때 윈도우 2만 사라지게 만들고 윈도우1은 계속 보이게 하려면 어떻게 해야 할까요?
아래는 소스 부분입니다.
#include <ncurses.h>
#include <stdlib.h>
#include <unistd.h>
#define ESCAPE 27
#define ENTER 10
char *student_item[] = {"", "이름: ", "학번", "전공", "학년"};
char *help_item[] = {"", "help", "about"};
char m_name[10]="";
WINDOW **student_menu_list(int start_col)
{
int i;
WINDOW **items;
items = (WINDOW **)malloc(5 * sizeof(WINDOW *));
items[0] = newwin(6, 19, 1, start_col);
wbkgd(items[0], COLOR_PAIR(2));
box(items[0], ACS_VLINE, ACS_HLINE);
items[1] = subwin(items[0], 1, 17, 2, start_col + 1);
items[2] = subwin(items[0], 1, 17, 3, start_col + 1);
items[3] = subwin(items[0], 1, 17, 4, start_col + 1);
items[4] = subwin(items[0], 1, 17, 5, start_col + 1);
for(i=1;i<5;i++)
wprintw(items[i], "%s", student_item[i]);
wbkgd(items[1], COLOR_PAIR(1));
wrefresh(items[0]);
return items;
}
WINDOW **name_window(int start_col)
{
int i;
char *name_item[] = {"", "이름을 입력하시오", "이름: "};
WINDOW **name;
name = (WINDOW **)malloc(3 * sizeof(WINDOW *));
name[0] = newwin(4, 22, 2, start_col);
wbkgd(name[0], COLOR_PAIR(2));
box(name[0], ACS_VLINE, ACS_HLINE);
name[1] = subwin(name[0], 1, 17, 3, start_col + 1);
name[2] = subwin(name[0], 1, 17, 4, start_col + 1);
for(i=1;i<3;i++)
wprintw(name[i], "%s", name_item[i]);
wbkgd(name[1], COLOR_PAIR(1));
wgetnstr(name[0], m_name, 10);
wmove(name[0], 2, 8);
wprintw(name[0], "%s", m_name);
wgetch(name[0]);
werase(name[0]);
wrefresh(name[0]);
printf("error");
return name;
}
int check_quit()
{
WINDOW *check;
int key;
check = newwin(3, 40, 5, 10);
wmove(check, 1, 2);
wprintw(check, "Exit program(Y/n)?");
wbkgd(check, COLOR_PAIR(2));
box(check, ACS_VLINE, ACS_HLINE);
refresh();
key = wgetch(check);
delwin(check);
if(key == 'y')
return 1;
else
return 0;
}
WINDOW **help_menu_list(int start_col)
{
int i;
WINDOW **items;
items = (WINDOW **)malloc(3 * sizeof(WINDOW *));
items[0] = newwin(4, 19, 1, start_col);
wbkgd(items[0], COLOR_PAIR(2));
box(items[0], ACS_VLINE, ACS_HLINE);
items[1] = subwin(items[0], 1, 17, 2, start_col +1);
items[2] = subwin(items[0], 1, 17, 3, start_col +1);
for(i=1;i<3;i++)
wprintw(items[i], "%s", help_item[i]);
wbkgd(items[1], COLOR_PAIR(1));
wrefresh(items[0]);
return items;
}
void delete_menu(WINDOW **items, int count)
{
int i;
for(i=0;i<count;i++)
delwin(items[i]);
free(items);
}
int scroll_menu(WINDOW **items, int count, int menu_start_col, int index_num)
{
int key;
int selected = 0;
while(1)
{
key = getch();
if(key == KEY_DOWN || key == KEY_UP)
{
wbkgd(items[selected + 1], COLOR_PAIR(2));
wnoutrefresh(items[selected + 1]);
if(key == KEY_DOWN)
{
selected = (selected + 1) % count;
}
else
{
selected = (selected + count - 1) % count;
}
wbkgd(items[selected + 1], COLOR_PAIR(1));
wnoutrefresh(items[selected + 1]);
doupdate();
}
else if(key == ESCAPE)
{
return -1;
}
else if(key == ENTER)
{
return selected;
}
}
}
void init_scr()
{
initscr();
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLUE);
init_pair(2, COLOR_BLUE, COLOR_WHITE);
init_pair(3, COLOR_RED, COLOR_WHITE);
curs_set(2);
noecho();
keypad(stdscr, TRUE);
}
void make_menubar(WINDOW *menubar)
{
wbkgd(menubar, COLOR_PAIR(2));
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "File");
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "(a)");
wmove(menubar, 0, 20);
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "Help");
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "(h)");
wattron(menubar, COLOR_PAIR(3));
}
else if(key == ENTER)
{
return selected;
}
}
}
void init_scr()
{
initscr();
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLUE);
init_pair(2, COLOR_BLUE, COLOR_WHITE);
init_pair(3, COLOR_RED, COLOR_WHITE);
curs_set(2);
noecho();
keypad(stdscr, TRUE);
}
void make_menubar(WINDOW *menubar)
{
wbkgd(menubar, COLOR_PAIR(2));
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "File");
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "(a)");
wmove(menubar, 0, 20);
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "Help");
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "(h)");
wattron(menubar, COLOR_PAIR(3));
}
int main()
{
WINDOW *menubar, *statusbar, *about;
}
void init_scr()
{
initscr();
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLUE);
init_pair(2, COLOR_BLUE, COLOR_WHITE);
init_pair(3, COLOR_RED, COLOR_WHITE);
curs_set(2);
noecho();
keypad(stdscr, TRUE);
}
void make_menubar(WINDOW *menubar)
{
wbkgd(menubar, COLOR_PAIR(2));
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "학생정보");
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "(a)");
wmove(menubar, 0, 20);
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "Help");
wattron(menubar, COLOR_PAIR(3));
waddstr(menubar, "(h)");
wattron(menubar, COLOR_PAIR(3));
}
int main()
{
WINDOW *menubar, *statusbar, *about;
int key;
init_scr();
bkgd(COLOR_PAIR(1));
menubar = subwin(stdscr, 1, 80, 0, 0);
statusbar = subwin(stdscr, 1, 79, 23, 1);
make_menubar(menubar);
move(2, 1);
printw("Press 'a' or 'h' to open the menus.");
printw("ESC or 'q' quits.");
refresh();
while(1)
{
WINDOW **menu_items, **name_items;
int selected_item;
key = getch();
werase(statusbar);
wrefresh(statusbar);
if(key == 'a')
{
menu_items = student_menu_list(0);
selected_item = scroll_menu(menu_items, 4, 20, 0);
delete_menu(menu_items, 5);
if(selected_item < 0)
wprintw(statusbar, "You haven't selected any item.");
else if(selected_item == 0)
{
name_items = name_window(19);
strcat(student_item[1], m_name);
delete_menu(menu_items, 3);
}
else
wprintw(statusbar, "You have selected menu item %d.", selected_item);
touchwin(stdscr);
refresh();
}
if(key == 'h')
{
menu_items = help_menu_list(20);
selected_item = scroll_menu(menu_items, 2, 0, 1);
delete_menu(menu_items, 3);
if(selected_item == 1)
{
}
if(selected_item < 0)
wprintw(statusbar, "You haven't selected any item.");
}
if(key == ESCAPE || key == 'q')
{
if(check_quit() == 1)
break;
}
touchwin(stdscr);
refresh();
}
endwin();
}
Forums:


댓글 달기