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:
댓글 달기