Ncurses����

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

Software Development

AuthorImage:[Here we need a little image from you]

[RehaGerceker]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in tr Reha K. Gerçeker

tr to en Reha K. Gerçeker

en to zh netconf

AboutTheAuthor:[A small biography about the author]

Reha����������˹̹������һ��ѧ���������ѧ��,����ϲ����������linux�ṩ��������չƽ̨. �����˺ܶ�ʱ�������ļ����ǰ��д����,��ϣ���Լ���һ���ܳ�Ϊһ��ΰ��ĵij���Ա.

Abstract:[Here you write a little summary]

Ncurses��һ�����ṩ���ܼ�����(��ݼ�),��Ļ�����Լ������ı��ն˵�ͼ�λ������ܵĶ�̬��

ArticleIllustration:[One image that will end up at the top of the article]

[ncurses]

ArticleBody:[The main part of the article]

ʲô��Ncurses?

��ϣ�����ij�����һ����ɫ�Ľ�����?Ncurses��һ�����ṩ�����ı��ն˴��ڹ��ܵĶ�̬��. Ncurses����:



Ncurses�������κ���ѭANSI/POSIX��׼��UNIXϵͳ������,����֮��,�������Դ�ϵͳ���ݿ��м���ն˵�����, �����Զ����е���,�ṩһ�������ն�Լ���Ľӿ�.���,Ncurses�����ڲ�ͬ��ϵͳƽ̨�Ͳ�ͬ���ն��Ϲ����ķdz���.

mc���߼�����һ����ncursesд�ĺܺõ�����,�������ն���ϵͳ�������õĽ���ͬ������ncurses��д��. ����������ǵĽ�ͼ:

[Midnight Commander]

[kernel config]

�����������?

Ncurses�ǻ���GNU/Linux��չ��,����� http://www.gnu.org/software/ncurses/�Ի�����µĸ��°汾����������ϸ��Ϣ�Լ�������� .

����֪ʶ

Ϊ���ܹ�ʹ��ncurses��,������������Դ�����н�curses.h����(include)����,�����ڱ������Ҫ������������. ��gcc��������ʹ�ò���-lcurses���б���.

��ʹ��ncurses��ʱ��,���б�Ҫ�˽����Ļ������ݽṹ.����һ��WINDOW�ṹ,�����־ͺ�����֪��,������������ �������Ĵ����,����ncurse���еĺ���������һ��WINDOWָ�����.

��ncurses��ʹ����������Ǵ���.��ʹ��û�д����Լ��Ĵ���,��ǰ��Ļ����Ϊ�����Լ��Ĵ���. ��ͬ��׼�������ϵͳ�ṩ����Ļ���ļ�������stdoutһ��(����û�йܵ�ת��),ncurses�ṩһ�� WINDOWָ��stdscr����ͬ����.����stdscr��,ncurses��������һ��WINDOWָ��curscr. ��stdscr������ǰ��Ļһ��,curscr������ǰ�ڿ��ж������Ļ,�����Դ���"������ʲô����?"�����������Ķ�.

Ϊ�������ij�����ʹ��ncurses�ĺ����ͱ���,���������ȵ���initscr����(��ʼ������),�����һЩ�������� stdscr,curscr�ȷ����ڴ�,������ncurses�⴦��׼��ʹ��״̬,���仰˵,����ncurses�����������initscr����. ͬ����Լ��,���ڽ���ʹ��ncurses��,Ӧ��ʹ��endwin���ͷ�����ncursesʹ�õ��ڴ�.��ʹ��endwin��,����������ʹ�� �κ�ncurses�ĺ���,��������һ�ε���initscr����.

��initscr��endwin֮��,�벻Ҫʹ�ñ�׼���������ĺ�������������Ļ��,����,���ῴ����Ļ�ᱻ������� Ū�����߰���,��ɲ����������Ľ��.��ncurses���ڼ���״̬ʱ,��ʹ�����Լ��ĺ������ѽ���������Ļ.�ڵ���initscr֮ǰ���� endwin֮��,���Ϳ������ʹ����.

ˢ����Ļ:refresh

WINDOW�ṹ���ᾭ������ͬһ�߶ȿ����Լ��ڴ����е�λ��,���ǻᱣ���ڴ����е�����.��������д������ʱ, ��ı䴰���е�����,��������ζ������Ļ�л�������ʾ����,Ҫ������Ļ����,�������refresh����wrefres����.

���������stdscr��curscr����֮�������.curscr�����ŵ�ǰ��Ļ������,�ڵ���ncurse�����������,stdscr��curscr���ܻ��в�ͬ������, ������������һ����Ļ���ݸı����stdscr��curscr����һ��,������ʹ��refresh����.���仰˵, refresh��Ψһһ������curscr�ĺ���.ǧ��ҪŪ������curscr��stdscr,Ӧ����refresh�����и���curscr�е�����

refresh��һ���ܾ����ܿ�ĸ�����Ļ�Ļ���,������refreshʱ,��ֻ���´��������ݸı����,���ʡ��CPU�Ĵ���ʱ�� ,��ֹ��������Ļ��д��ͬ����Ϣ(����ע:����Ļ��ͬһλ�ò���������ʾͬ��������.)���ֻ��ƾ���Ϊʲôͬʱʹ��ncurses�ĺ��� �ͱ�׼��������������������Ļ���ݴ�λ��ԭ��.������ncurses���������ʱ,��������һ����־,����refresh ֪������һ�иı���.���������ñ�׼�����������ʱ,�Ͳ���������ֽ��.

refresh��wrefresh��ʵ����ͬ��������.wrefresh��Ҫһ��WINDOW��ָ�����,������ˢ�¸ô��������. refresh()��ͬ��wrefresh(stdscr).���ں�����ᵽ,��wrefreshһ��,ncursers�����ຯ��������������Ϊstdscr����ĺ꺯��.

����һ���µĴ���

����������̸̸�ܶ����´����subwin��newwin����.���Ƕ���Ҫһ���������´���ĸ߶�,�����Լ� ���Ͻ�λ�õIJ���,���ҷ���һ��WINDOWָ����ָ��ô���.������ʹ��������Ϊwrefresh�IJ�������һЩ�����ҽ�Ҫ ̸���ĺ���.

�����ܻ���:"���������ͬ��������,ΪʲôҪ����������?",���ǶԵ�,����֮����һЩϸ΢�IJ��.subwin����һ�� ������Ӵ���,�����̳��˸��������������.��������Ӵ����иı�����Щ���Ե�ֵ,��������Ӱ�츸����.

����֮��,��������Ӵ���֮�仹��һЩ��ϵ.��������Ӵ����е����ݽ��˴˹���,�˴�Ӱ��.���仰˵, �ڸ����ں��Ӵ����ص���������ַ��ᱻ����һ������ı�.���������д�������ݵ��������,�Ӵ������������ͬ�� �ı���,��֮Ҳ�����.

��subwin��ͬ����,newwin����һ�����еĴ���.�����Ĵ���,��û�����ǵ��Ӵ���֮ǰ,�Dz�����������干�� �κ��ı����ݵ�.ʹ��subwin�ĺô��ǿ���ʹ�ý��ٵ��ڴ�Ϳ��Է���Ĺ����ַ�������.������������Ĵ������ݻụ��Ӱ�� ��ô��Ӧ��ʹ��newwin.

�����Դ�����������Ӵ���,ÿһ���Ӵ����ֿ��������Լ����Ӵ���,����һ��Ҫ��ס,������ַ������DZ��������� �Ĵ��干����.

����������������Ĵ����,������ʹ��delwin������ɾ���ô���.�ҽ�����ʹ��man pages���õ���Щ��������ϸ����.

����д���ݺʹӴ��������

����̸����stdscr,curscr,�Լ�ˢ����Ļ�Ͷ���һ���´���,��������������һ������д������?����������һ�������ж�������?

ʵ������Ŀ�ĺ�����ͬ��׼����������е�һЩ����һ��,����ʹ��printw���滻printf�������,scanw�滻scanf��������, addch�滻putc����putchar,getch�滻getc����getchar.�����÷�һ��,�������ֲ�ͬ,���Ƶ�,addstr������������ д��һ���ַ���,getstr�����Ӵ����ж���һ���ַ���.������Щ����������һ��"w"��ĸ��ͷ,�����ٸ��Ϻ���������, �����Ҫ��������һ����������,��һ�����������Ǹô����WINDOWS�ṹָ��,�ٸ�����,printw(...)��wprintw(stdscr,...) ����ͬ��,����ͬrefresh()��wrefresh(stdscr)һ��.

���Ҫд��Щ��������ϸ˵��,��ƪ���½����ĺܳ�.Ҫ�õ����ǵ�����,ԭ���Լ�����ֵ����������Ϣ,man pages��һ��������ѡ��. �ҽ���������man pages�����ʹ�õ���һ������.�����ṩ����ϸ�ͷdz����õ���Ϣ.����ƪ���µ����һ��,���ṩ�� һ��ʾ������,���Ե�����һ��ncurses������ʹ��ָ��.

����ָ����߼�ָ��

�ڽ���д�����ݺʹӴ���������ݺ�,������Ҫ����һ������ָ����߼�ָ�� ����ָ����һ������ָ��,��ֻ��һ��,����һ�����潲,�߼�ָ������ncurses����, ÿһ�����嶼ֻ��һ������ָ��,�������ǿ����ж���߼�ָ��.

������׼��д��Ͷ�����ʱ��,�߼�ָ���ָ�����н�Ҫ���в���������.���, ͨ���ƶ��߼�ָ��,�������κ�ʱ�������е�����λ��д������.������������׼��������������֮��.

�ƶ��߼�ָ��ĺ�����move��������һ�����dz����ײ³����ĺ���wmove.move��wmove��һ���꺯��,ר���������� stdscr��.

����һ����Ҫȷ�ϵ�������ָ����߼�ָ���Э����ϵ,����ָ���λ�ý�����һ��д��������Ч,��������ͨ������ ͨ��WINDOW�ṹ��_leave��־��λ��.���������_leave��־,��д����������,�߼�ָ�뽫���ƶ�������ָ��ָ���������д�������. ���û������_leaveλ,��д����������,����ָ�뽫���ص��߼�ָ��ָ����ĵ�һ���ַ�д��λ��._leave��־����leaveok�������Ƶ�.

�ƶ�����ָ��ĺ�����mvcur,���������ĺ���,mvcur�ڲ��õȴ�refresh�����ͻ�������Ч.���������������ָ��, ������ʹ��curs_set����,ʹ��man pages�������ϸ��Ϣ.

ͬ������һЩ�꺯�������������ƶ���д��Ⱥ���.��������addch,addstr,printw,getch,getstr,scanw�Ⱥ��� ��man pagesҳ�õ�����Ľ���.

�������

����������д�����ݺ�,������ô���������,�к��ַ�?

��ncurses��,�����ζ���ÿհ��ַ������������,���л����������������. �����ҽ��ܵĺ�������ʹ�ÿհ��ַ�����Ҫ������,�ﵽ����������Ŀ��.

��������̸��������ַ����еĺ���,delch��wdelch��ɾ���������߼�ָ��ָ����ַ�,��һ���ַ���һֱ����ĩ���ַ��������� һ��λ��.deleteln��wdeleteln��ɾ�����߼�ָ��ָ�����,����������һ��.

clrteol��wclrtoeol����������߼�ָ��ָ��λ���ұ��ַ���ʼ����ĩ�������ַ�.clrtbot��wclrtobot ������������߼�ָ������λ���ұ��ַ���ʼ����ĩ�������ַ�,����ɾ������������.

������Щ,����һЩ���������������Ļ�ʹ���.�����ַ������������������Ļ.��һ�������ÿհ��ַ���� ��Ļ��������,Ȼ���ٵ���refresh����.����һ�ַ������ù̶����ն˿����ַ����.��һ�ַ����Ƚ���,��Ϊ����Ҫ��д ��ǰ��Ļ.�ڶ�����Ѹ�����������Ļ����.

erase��werase�ÿհ��ַ��滻������ı��ַ�,����һ�ε���refresh����Ļ���ݽ��ᱻ�����.����������� ��Ҫ���������Ļ, �⽫һ���Ƚϱ��İ취.������ʹ�����潲�ĵ�һ�ַ��������.��������Ҫ���������һ����Ļ��ô��, ������ʹ�����潲�ĺ������dz��õ������������.

���漰����������֮ǰ,������������һ��_clear��־λ.��������˸ñ�־,��ô�������WINDOW�ṹ��. ��������ʱ,������refresh�����Ϳ��ƴ��뵽�ն�,refresh��鴰��Ŀ����Ƿ�����Ļ�Ŀ���(ʹ��_FULLWIN��־λ). ����ǵĻ�,���������õ��ն˷���ˢ����Ļ,����д����˿հ��ַ�����ı��ַ�����Ļ,����һ�ַdz����������ķ���. Ϊʲô����������Ŀ��Ⱥ���Ļ�������ʱ�������õ��ն˷���������?������Ϊ�����ն˴��벻����ֻ����������� ,�������������ǰ��Ļ._clear��־λ��clearok��������.

����clear��wclear�������������Ļ����һ���Ĵ�������.ʵ����,��Щ������ͬ��ʹ��werase��clearok. ����,���ÿհ��ַ���䴰����ı��ַ�.����,����_clear��־λ,���������Ⱥ���Ļ����һ��,��ʹ�����õ��ն˷��� ����,�����һ�����ÿհ��ַ���䴰��������������refreshˢ��.

�ܶ���֮,�����֪������Ŀ��Ⱥ���Ļ����һ��,��ʹ��clear����wclear,����ٶȽ��dz���.���������� ���Ǻ���Ļ����һ��,��ôʹ��wclear��werase��û���κηֱ�.

ʹ����ɫ

������Ļ�Ͽ�������ɫ��ʵ������ɫ��,��Ϊÿһ��������һ������ɫ��һ��ǰ��ɫ.ʹ��ncurses��ʾ��ɫ ��ζ���������Լ�����ɫ�Բ��ҽ���Щ��ɫ��д�뵽����.

��ͬʹ��ncurses���������ȵ���initscrһ��,start_color��Ҫ���ȵ����Գ�ʼ��ɫ��. �����������Լ�����ɫ�Եĺ�����init_pair,����ʹ����������һ����ɫ�Ժ�,����������ں����е����õĵ�һ��������ϵ����. �ڳ�����,������ʲôʱ����Ҫ�ø���ɫ��,��ֻ����COLOR_PAIR���øò����Ϳ�����.

���˶�����ɫ��,��������ʹ�ú�������֤д���ʹ�����ò�ͬ����ɫ��,attron��wattron������������Ҫ��. ʹ����Щ������������ѡ�����ɫ��д�����ݵ���Ӧ����Ļ��,ֱ��������attroff����wattroff����.

bkgd��wbkgd�������Ըı���Ӧ�������������ɫ��,����ʱ,������ı䴰�����������ǰ��ɫ�ͱ���ɫ.Ҳ�� ��˵,����һ��ˢ�¶���ǰ,���������е����򽫻�ʹ���µ���ɫ����д.

ʹ�øղ��ᵽ����Щ����man pages���õ���ϸ�Ĺ�����ɫ���Ϻ���Ϣ.

����ı߿�

�����Ը����ij�������Ĵ���һ���ܺÿ��ı߿�,�ڿ�����һ��box�꺯����������������һ��,������������ ��ͬ����,û��wbox����.box��Ҫһ��WINDOWָ������Ϊ����.

��������box��man pagesҳ���ɻ����ϸ�İ���,������һЩ��Ҫע�����,��һ���������ñ߿���ʵֻ�� �ڴ������Ӧ�߿�����д����һЩ�ַ�.������ڱ߿�����һ��д����ijЩ����,�߿򽫻ᱻ�ж�. ����İ취����������ԭʼ���������ٽ�һ���Ӵ���,��ԭʼ������뵽�߿�����Ȼ��ʹ��������Ӵ�����Ϊ��Ҫ���������ݴ���.

���ܼ�

Ϊ���ܹ�ʹ�ù��ܼ�,������������Ҫ��������Ĵ���������_use_keypad��־λ,keypad��һ�������� _use_keypadֵ�ĺ���,����������_use_keypad��,���Ϳ���ʹ�ü��̵Ĺ��ܼ�(��ݼ�),��ͬ��ͨ����һ��.

������,�������ʹ��getch�������򵥽����������������,����Ҫע�����Ҫ�����ݸ������α���(int)������ �ַ���(char).������Ϊ���α��������ɵĹ��ܼ����ַ��͸���.������Ҫ֪����Щ���ܼ���ֵ,��ֻ��Ҫʹ�ÿ��ж���� �����Ϳ�����,��getch��man page������Щ��ֵ���б�.

����

���ǽ�������һ���dz���ʵ�õij���.�����������,��ʹ��ncurses����˵�,�˵��е���һ��ѡ����ᱻ֤��ѡ��. �������Ƚ�����˼��һ�����ʹ����ncurses�Ĵ������ﵽ�˵�Ч��.�����Կ��������Ļ��ͼ.

[example program]

����ʼ����ͨһ��,������ȥ��һ��ͷ�ļ�.�������Ƕ����˻س�����escape����ASCII��ֵ.

#include <curses.h>
#include <stdlib.h>

#define ENTER 10
#define ESCAPE 27

�������ʱ��,����ĺ����ᱻ����.�����ȵ���initscr��ʼ��ָ����ŵ���start_color����ʾ��ɫ. ������������ʹ�õ���ɫ�Ի��ں��涨��.����curs_set(0)�����ε�����ָ��.noecho()����ֹ�����ϵ����������Ļ����ʾ����. ������ʹ��noecho�������Ƽ�������������ַ�,ֻ������Ҫ���ַ���ʾ.echo()�������ε�����Ч��. ���ŵĺ���keypad�����˿�����stdscr�н��ܼ��̵Ĺ��ܼ�(��ݼ�),������Ҫ�ں���ij����ж���F1,F2�Լ��ƶ��Ĺ���.

void init_curses()
{
    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(0);
    noecho();
    keypad(stdscr,TRUE);
}

���涨����������������һ����ʾ����Ļ����IJ˵���, �����Կ������main�γ���,������ȥ����ֻ����Ļ�����һ��,��ʵʵ������stdscr�����һ���Ӵ���,���Ӵ���ֻ�� һ��.����ij���ָ����Ӵ����ָ����Ϊ���IJ���,���ȸı����ı���ɫ,���Ŷ���˵�������,����ʹ��waddstr����˵� ������.��Ҫע�����wattron����������һ����ͬ����ɫ��(���3)��ȡ��ȱʡ����ɫ��(���2).��ס2����ɫ�����ʼ�� ��wbkgd���ó�ȱʡ����ɫ����.wattroff���������������л���ȱʡ����ɫ��״̬.

void draw_menubar(WINDOW *menubar)
{
    wbkgd(menubar,COLOR_PAIR(2));
    waddstr(menubar,"Menu1");
    wattron(menubar,COLOR_PAIR(3));
    waddstr(menubar,"(F1)");
    wattroff(menubar,COLOR_PAIR(3));
    wmove(menubar,0,20);
    waddstr(menubar,"Menu2");
    wattron(menubar,COLOR_PAIR(3));
    waddstr(menubar,"(F2)");
    wattroff(menubar,COLOR_PAIR(3));
}

��һ��������ʾ�˵�����F1����F2����ʾ�IJ˵�,������һ������ɫ������ �˵�����ɫһ���İ�ɫ��������,���Dz�ϣ������´��ڻᱻ��ʾ�ڱ���ɫ�ϵ��ָ��ǵ�.����Ӧ��ͣ��������ֱ�� �ر��˲˵�.�����Ϊʲô�˵����岻�ܶ���Ϊstdscr���Ӵ���,������ᵽ,����items[0]����newwin���������, ����8���������Ƕ����items[0]������Ӵ���.�����items[0]����������һ��Χ���ڲ˵��Աߵı߿�,������ ������������ʾ�˵���ѡ�еĵ�Ԫ.ͬ����,���Dz��Ḳ�ǵ��˵��ϵı߿�.Ϊ������ѡ�к�ûѡ�е�״̬,�б�Ҫ�� ѡ�еĵ�Ԫ����ɫ�������IJ�һ��.�������������е����������������,�˵��еĵ�һ����Ԫ����ɫ�������IJ�һ��, ������Ϊ�˵���������,��һ����Ԫ��ѡ��״̬.

WINDOW **draw_menu(int start_col)
{
    int i;
    WINDOW **items;
    items=(WINDOW **)malloc(9*sizeof(WINDOW *));

    items[0]=newwin(10,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);
    items[5]=subwin(items[0],1,17,6,start_col+1);
    items[6]=subwin(items[0],1,17,7,start_col+1);
    items[7]=subwin(items[0],1,17,8,start_col+1);
    items[8]=subwin(items[0],1,17,9,start_col+1);
    for (i=1;i<9;i++)
        wprintw(items[i],"Item%d",i);
    wbkgd(items[1],COLOR_PAIR(1));
    wrefresh(items[0]);
    return items;
}

������������򵥵�ɾ�������溯������IJ˵�����.��������delwin����ɾ������, �����ͷ�itemsָ����ڴ浥Ԫ.

void delete_menu(WINDOW **items,int count)
{
    int i;
    for (i=0;i<count;i++)
        delwin(items[i]);
    free(items);
}

scroll_menu�������������ڲ˵�ѡ�����������ƶ�,��ͨ��getch��ȡ�����ϵļ�ֵ,��������˼����ϵ����ƻ������Ʒ����, �˵�ѡ�������һ���������һ���ѡ��.����һ�¸ղ�������,ѡ����ı���ɫ�����ûѡ�еIJ�һ��.���������������� �ķ����,��ǰ�˵�����ر�,��һ���˵���.��������˻س���,�򷵻�ѡ�еĵ�Ԫֵ.���������ESC��,�˵����ᱻ�ر�,����û���κ�ѡ���� ,����ĺ��������������������.getch�ܴӼ����϶�ȡ��ֵ,������Ϊ�����ڳ���ʼʹ����keypad(stdscr,TRUE) ���ҽ�����ֵ����һ��int�ͱ���������char�ͱ���,������Ϊint�ͱ����ܱ�ʾ��char�͸����ֵ.

int scroll_menu(WINDOW **items,int count,int menu_start_col)
{
    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==KEY_LEFT || key==KEY_RIGHT) {
            delete_menu(items,count+1);
            touchwin(stdscr);
            refresh();
            items=draw_menu(20-menu_start_col);
            return scroll_menu(items,8,20-menu_start_col);
        } else if (key==ESCAPE) {
            return -1;
        } else if (key==ENTER) {
            return selected;
        }
    }
}

���������ǵ�main������.��ʹ�����������������������ͱ�д�ĺ�����ʹ������ʵĹ���. ��ͬ��ͨ��getch��ȡ��ֵ���ж�F1����F2�Ƿ�����,������draw_menu������Ӧ�IJ˵������ϻ��Ʋ˵�. ���ŵ���scroll_menu�������û�ѡ��ijһ���˵�,��scroll_menu���غ�,��ɾ���˵����岢����ʾ��ѡ��ĵ�Ԫ���� ����Ϣ����.

�ұ����ᵽ���Ǻ���touchwin.����ڲ˵��رպ�û�е���touchwin������ˢ��,��ô���򿪵IJ˵���һֱͣ���� ��Ļ��.������Ϊ�ڵ���refreshʱ,menu����������û����ȫ�ı�stdscr������.��û������д�����ݵ�stdscr��, ��Ϊ����Ϊ��������û�иı�.touchwin��������������WINDOW�ṹ�еı�־λ,��֪ͨrefreshˢ�´��������е���, ֵ���ı���,��������һ��ˢ����������ʱ,��ʹ��������û�иı�ҲҪ����д��һ��.�ڲ˵��رպ�,ѡ��IJ˵���Ϣ��һֱͣ���� stdscr����.�˵�û����stdscr��д����,��Ϊ���ǿ���һ���µ��Ӵ���.

int main()
{
    int key;
    WINDOW *menubar,*messagebar;
    
    init_curses();
    
    bkgd(COLOR_PAIR(1));
    menubar=subwin(stdscr,1,80,0,0);
    messagebar=subwin(stdscr,1,79,23,1);
    draw_menubar(menubar);
    move(2,1);
    printw("Press F1 or F2 to open the menus. ");
    printw("ESC quits.");
    refresh();

    do {
        int selected_item;
        WINDOW **menu_items;
        key=getch();
        werase(messagebar);
        wrefresh(messagebar);
        if (key==KEY_F(1)) {
            menu_items=draw_menu(0);
            selected_item=scroll_menu(menu_items,8,0);
            delete_menu(menu_items,9);
            if (selected_item<0)
                wprintw(messagebar,"You haven't selected any item.");
            else
                wprintw(messagebar,
                  "You have selected menu item %d.",selected_item+1);
            touchwin(stdscr);
            refresh();
        } else if (key==KEY_F(2)) {
            menu_items=draw_menu(20);
            selected_item=scroll_menu(menu_items,8,20);
            delete_menu(menu_items,9);
            if (selected_item<0)
                wprintw(messagebar,"You haven't selected any item.");
            else
                wprintw(messagebar,
                  "You have selected menu item %d.",selected_item+1);
            touchwin(stdscr);
            refresh();
        }
    } while (key!=ESCAPE);
    
    delwin(menubar);
    delwin(messagebar);
    endwin();
    return 0;
}

����������˴��뵽һ���ļ�,����������example.c,���������������е�ע��,�����������������������:

gcc -Wall example.c -o example -lcurses

Ϊ�˲��Գ���,�������ڲο�һ�������ظó���.

�ܽ�

��̸���˺ܶ����ncurses�Ļ���֪ʶ,Ӧ���㹻���������ij��򴴽�һ���ܺÿ��Ľ���.�������෽��Ĺ��� �����ﶼû���ἰ,���������Ҿ����ʵ��ļ���������man pages�����ҵ��ܶ����õ���Ϣ.�����˺�,���������� �������ᵽ�Ķ��������ݽ�����һ�����ܶ���.

�ο�