#include <ncursesw/ncurses.h>
#include <locale.h>
#include <ncursesw/menu.h>
#include <stdio.h>
#include <ctype.h>
//定义菜单项
static const char *menus[]={
"1-1","1-2","1-3","2-1","2-2","2-3"
};
#define CITEM sizeof(menus)/sizeof(menus[0])//菜单项数
ITEM *items[CITEM];
int main(int argc,char *argv[]){
int i;
int ch;
int mrows,mcols;
WINDOW *win,*subwin;
MENU *mymenu;
//初始化屏幕
initscr();
//不用等待回车键
cbreak();
//不回显
noecho();
//可以处理功能键
keypad(stdscr,TRUE);
//建立菜单项
for(i=0;i<CITEM;i++){
items[i]=new_item(menus[i],menus[i]);//第二个参数为菜单项的描述
}
//建立菜单
mymenu=new_menu(items);
set_menu_format(mymenu,CITEM,1); //设置CITEM行1列的菜单
set_menu_mark(mymenu,">");//菜单选中的MARK
//获得菜单的行列数
scale_menu(mymenu,&mrows,&mcols);
//建立窗口和子窗口
win=newwin(mrows+2,mcols+2,3,30);
keypad(win,TRUE);
box(win,0,0);
subwin=derwin(win,0,0,1,1);
//设置菜单的窗口
set_menu_sub(mymenu,subwin);
//在子窗口上放置菜单
post_menu(mymenu);
refresh();
wrefresh(win);
//获得输入,并移动选择到相应的菜单项
while(toupper(ch=wgetch(win))!='\n'){
if(ch==KEY_DOWN)
menu_driver(mymenu,REQ_DOWN_ITEM);//移动菜单选择
else if(ch==KEY_RIGHT)
menu_driver(mymenu,REQ_RIGHT_ITEM);
else if (ch==KEY_UP)
menu_driver(mymenu,REQ_UP_ITEM);
else if (ch==KEY_LEFT)
menu_driver(mymenu,REQ_LEFT_ITEM);
}
//输出当前项
mvprintw(LINES-2,0,"你选择了:%s\n",item_name(current_item(mymenu)));
refresh();
unpost_menu(mymenu);
getch();
//释放内存
free_menu(mymenu);
for(i=0;i<CITEM;i++) free_item(items[i]);
endwin();
exit(0);
}
?

?