创建菜单.docx
- 文档编号:24873003
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:21
- 大小:18.45KB
创建菜单.docx
《创建菜单.docx》由会员分享,可在线阅读,更多相关《创建菜单.docx(21页珍藏版)》请在冰豆网上搜索。
创建菜单
±¾³ÌÐòÐèÒª½èÀßÁ½¸ö²ÎÊýÎļþÀ´ÊµÏÖ:
£¨1£©¡¢¶Ô²Ëµ¥ÖÐÿһÏî²ÎÊý½øÐÐ˵Ã÷µÄÎļþ£¨menu.def)£¬Ëü¸ñʽÈçÏÂËùÊö£º
£¡ËùÊô²Ëµ¥´úºÅ£¡Ïî˳ÐòºÅ£¡²Ëµ¥ÏîÃû³Æ£¡Íâ¹Ò³ÌÐòÃû³Æ£¡Ï¼¶²Ëµ¥´úºÅ£¡
˵Ã÷£º
1¡¢Èç²Ëµ¥´úºÅΪ"0"£¬Ôò±íʾ´ËÏîÊôÓÚÖ÷²Ëµ¥£»
2¡¢ÈçÍâ¹Ò³ÌÐòÃû³ÆΪ"0"£¬Ôò±íʾ´Ë²Ëµ¥Ïî¶ÔÓ¦µÄ¹ý³ÌÔڲ˵¥³ÌÐòÄÚ²¿»ò¶ÔÓ¦ÓÚÒ»¸ö×Ӳ˵¥£»
3¡¢Èçϼ¶²Ëµ¥´úºÅΪ"0"£¬Ôò±íʾ´Ë²Ëµ¥ÏîÎÞϼ¶×Ӳ˵¥£»
4¡¢Ïî˳ÐòºÅͬʱ¿É×÷Ϊ²Ëµ¥ÈȼüʹÓá£
¼ÙÈçÎļþmenu.defÖÐÓÐÏÂÃæÕâÒ»ÐУº
£¡0£¡3£¡¸ñʽ»¯´ÅÅÌ£¡format/dev/rfd0135ds18£¡0£¡
Ëü±íʾÖ÷²Ëµ¥µÄµÚÈýÏîΪ¸ñʽ»¯´ÅÅÌ£¬Ëü¶ÔÓ¦µÄÖ´Ðйý³ÌΪformat/dev/rfd0135ds18£¬±¾ÏîÎÞ×Ӳ˵¥¡£
Èç¹ûÓû§Ïë°Ñ×Ô¼º±àµÄʵÏÖ²éѯ¹¦ÄܳÌÐòXXX¹Òµ½±¾³ÌÐòÖ÷²Ëµ¥µÚ4ÏîÉÏ£¬Ôò¿ÉÔÚmenu.defÖÐÔö¼ÓÏÂÃæÕâÒ»ÐУº
£¡0£¡4£¡²éѯ£¡XXX£¡0£¡
£¨2£©¡¢¶Ô¸÷²Ëµ¥²ÎÊý½øÐÐ˵Ã÷Îļþ£¨menu.conf)£¬Æä¸ñʽÈçÏÂËùÊö£º
£¡²Ëµ¥´úºÅ£¡ÉÏÒ»¼¶²Ëµ¥´úºÅ£¡±ß¿ò±êÖ¾£¡²Ëµ¥¿í¶È£¡²Ëµ¥ÐÐÊý£¡²Ëµ¥ÁÐÊý£¡Æðʼºá×ø±ê£¡Æðʼ×Ý×ø±ê£¡
˵Ã÷£º
1¡¢±ß¿ò±ê־Ϊ"0"±íʾÎÞ¿ò£¬Îª"1"±íʾÓб߿ò£»
2¡¢Éϼ¶²Ëµ¥´úºÅΪ"-1"£¬±íʾÎÞÉϼ¶²Ëµ¥£»
3¡¢Èç²Ëµ¥´úºÅΪ"0"£¬±íʾÖ÷²Ëµ¥¡£
µ±Óû§¶Ô²Ëµ¥ÏÔʾÑùʽ²»ÂúÒâʱ£¬¿Éͨ¹ýµ÷Õû´ËÎļþÉè¼Æ¸öÐÔ»¯µÄ½çÃæ¡£
¶þ±à³ÌʵÏÖ
±¾³ÌÐòÎļþΪmenu.c£¬²¿·Ö´úÂëÈçÏ£º
#include
#defineESC27
#defineENT13
#defineREFRESH12
#defineMAX_M10/*²Ëµ¥×î´ó²ãÊý*/
voidinitial(),nomlastpos(),revcurpos(),disponepage(),dispprevline();
voiddispnextline(),domenu(),getmenuconf(),keycont();
voidgetitem(),get_m_conf(),get_m_item(),clearwin(),execprog();
/*±êʶÿһ²Ëµ¥ÏîµÄ½á¹¹*/
structmenu{
shortmenu_code;/*ËùÊô²Ëµ¥´úºÅ*/
shortitem_order;/*Ïî˳ÐòºÅ*/
charitem[20];/*²Ëµ¥ÏîÃû³Æ*/
charprog[80];/*±¾Ïî²Ëµ¥Ö´ÐгÌÐò*/
shortsubmenu_code;/*ÏÂÒ»¼¶²Ëµ¥±àºÅ*/
structmenu*next;/*Ö¸ÏòÉÏÒ»ÏîµÄÖ¸Õë*/
structmenu*prev;/*Ö¸ÏòÏÂÒ»ÏîµÄÖ¸Õë*/
}m_item,*head,*this,*new,*last,*scrpos,*lastscrpos,*begin,*lastbegin,*lastscr[MAX_M];
/*±êʶÿһ²Ëµ¥ÄÚÈݵĽṹ*/
structmenuconf{
shortmenu_code;/*²Ëµ¥´úºÅ*/
shortlast_code;/*ÉÏÒ»¼¶²Ëµ¥´úºÅ*/
shortbord_flag;/*±ß¿ò±êÖ¾0--Îޱ߿ò1--Óб߿ò**/
shortm_wight;/*²Ëµ¥ÏÔʾ¿í¶È*/
shortm_lengh;/*ÿһÐÐÏîÊý*/
shortm_col;/*²Ëµ¥ÁÐÊý*/
shortm_bx;/*²Ëµ¥Æðʼºá×ø±ê*/
shortm_by;/*²Ëµ¥Æðʼ×Ý×ø±ê*/
}m_conf;
WINDOW*menuwin,*boxwin,*curw,*lastw[MAX_M],*workwin;
longcurpos,lastcurpos,lastscrcurpos,lastmenucur[MAX_M];
shortmenu_no=0,wno=0;
/*Ö÷º¯Êý*/
main()
{
initial();
getmenuconf(0);/*È¡µÚ0ºÅ²Ëµ¥²ÎÊý*/
/*´´½¨Ö÷´°¿Ú*/
menuwin=newwin(m_conf.m_lengh,m_conf.m_wight,m_conf.m_bx+1,m_conf.m_by+1);
curw=menuwin;lastw[wno]=menuwin;
getitem();/*È¡µ±Ç°²Ëµ¥¸÷ÏîÄÚÈÝ*/
domenu(head,0);
endwin();
}
/*È¡²Ëµ¥¸÷Ïî²ÎÊýº¯Êý*/
voidgetitem()
{
FILE*fp;
charbuff[0x100];
/*½¨±ß¿ò´°¿Ú*/
boxwin=newwin(m_conf.m_lengh+2,m_conf.m_wight+2,m_conf.m_bx,m_conf.m_by);
keypad(curw,TRUE);
if(m_conf.bord_flag==1){
box(boxwin,0,0);
wrefresh(boxwin);
}
head=NULL;
if((fp=fopen("./menu.def","r"))==NULL){
fprintf(stderr,"\n²»ÄÜ´ò¿ª²Ëµ¥¶¨ÒåÎļþ\n");
return;
}
while(fgets(buff,0x100,fp)!
=NULL){
get_m_item(buff);
if(m_item.menu_code!
=menu_no)
continue;
new=(structmenu*)malloc(sizeof(structmenu));
if(head==NULL){
last=head;head=new;
}
else{
this->next=new;last=this;
}
this=new;
this->menu_code=m_item.menu_code;
this->item_order=m_item.item_order;
strcpy(this->item,m_item.item);
strcpy(this->prog,m_item.prog);
this->submenu_code=m_item.submenu_code;
this->next=NULL;
this->prev=last;
}
fclose(fp);
}
/*²Ëµ¥´¦Àíº¯Êý*/
voiddomenu(curscrp,curp)
structmenu*curscrp;
intcurp;
{
inti,x,y;
structmenu*mpos;
this=head;
disponepage(this);
curpos=curp;scrpos=curscrp;
lastcurpos=lastscrcurpos=0;
revcurpos();
for(;;){
switch(wgetch(curw)){
caseENT:
/*ÓÐÏÂÒ»¼¶²Ëµ¥*/
if((!
strcmp(scrpos->prog,"0"))&&(scrpos->submenu_code!
=0)){
lastbegin=begin->next;
getmenuconf(scrpos->submenu_code);
menu_no=scrpos->submenu_code;
wno++;
lastmenucur[wno]=curpos;
lastscr[wno]=scrpos;
lastw[wno]=curw;
workwin=newwin(m_conf.m_lengh,m_conf.m_wight,m_conf.m_bx+1,m_conf.m_by+1);
curw=workwin;
getitem();
domenu(head,0);
}
/*ÊÇÄÚ²¿º¯Êý*/
/*ÊÇÍⲿ¿ÉÖ´ÐгÌÐò*/
else{
endwin();
execprog();
}
break;
caseESC:
case'q':
case'Q':
case'0':
/*ÎÞÉϼ¶²Ëµ¥*/
if(m_conf.last_code==-1){
clearwin();endwin();exit(0);
}
/*ÓÐÉϼ¶²Ëµ¥*/
else{
menu_no=m_conf.last_code;
clearwin();
getmenuconf(menu_no);
getitem();
touchwin(lastw[wno]);
curw=lastw[wno];
curpos=lastmenucur[wno];
scrpos=lastscr[wno];
wno--;
wrefresh(curw);
}
break;
case'r':
case'R':
caseREFRESH:
/*ÖØÏÔÆÁÄ»*/
wrefresh(curscr);
break;
caseKEY_RIGHT:
/*ÓÒ¹â±ê¼ü*/
if(scrpos->next!
=NULL){
lastcurpos=curpos;lastscrpos=scrpos;
scrpos=scrpos->next;
getyx(curw,x,y);
if((x==m_conf.m_lengh-1)&&(curpos%m_conf.m_col==m_conf.m_col-1)){
curpos-=(m_conf.m_col-1);lastcurpos=curpos-1;
/*ʵÏÖÏòÉϾíÆÁ*/
wmove(curw,0,0);wdeleteln(curw);dispnextline("R");
}
else
curpos++;
if((curpos%m_conf.m_col==0)&&(m_conf.m_lengh==1)){
revcurpos();break;
}
else{
nomlastpos();revcurpos();
}
}
break;
caseKEY_LEFT:
/*×ó¹â±ê¼ü*/
if(scrpos->prev!
=NULL){
lastcurpos=curpos;lastscrpos=scrpos;
scrpos=scrpos->prev;
getyx(curw,x,y);
if((x==0)&&(curpos%m_conf.m_col==0)){
curpos+=m_conf.m_col-1;lastcurpos=curpos+1;
/*ʵÏÖÏòϾíÆÁ*/
winsertln(curw);dispprevline("L");
}
else
curpos--;
if((curpos%m_conf.m_col==m_conf.m_col-1)&&(m_conf.m_lengh==1)){
revcurpos();break;
}
else{
nomlastpos();revcurpos();
}
}
break;
caseKEY_UP:
/*ÉϹâ±ê¼ü*/
lastcurpos=curpos;lastscrpos=scrpos;
mpos=scrpos;
for(i=0;i/td>
if(mpos->prev!
=NULL)mpos=mpos->prev;
elsebreak;
}
if(i==m_conf.m_col){
getyx(curw,x,y);
if(x==0){
lastcurpos+=m_conf.m_col;
/*ʵÏÖÏòϾíÆÁ*/
winsertln(curw);dispprevline("U");
}
else{
curpos-=m_conf.m_col;
}
scrpos=mpos;
if(m_conf.m_lengh!
=1)
nomlastpos();
revcurpos();
}
break;
caseKEY_DOWN:
/*Ϲâ±ê¼ü*/
lastcurpos=curpos;lastscrpos=scrpos;
mpos=scrpos;
for(i=0;i/td>
if(mpos->next!
=NULL)
mpos=mpos->next;
else
break;
}
if(i==m_conf.m_col){
getyx(curw,x,y);
if(x==m_conf.m_lengh-1){
lastcurpos-=m_conf.m_col;
/*ʵÏÖÏòÉϾíÆÁ*/
wmove(curw,0,0);wdeleteln(curw);dispnextline("D");
}
else
curpos+=m_conf.m_col;
scrpos=mpos;
if(m_conf.m_lengh!
=1)
nomlastpos();
revcurpos();
}
break;
default:
beep();
break;
}
}
}
/*·´ÏÔµ±Ç°ÏÊý*/
voidrevcurpos()
{
wattrset(curw,A_STANDOUT);
wmove(curw,curpos/m_conf.m_col,
(curpos%m_conf.m_col)*m_conf.m_wight/m_conf.m_col+m_conf.m_col);
wprintw(curw,"%s",scrpos->item);
wattrset(curw,A_NORMAL);
wrefresh(boxwin);
}
/*Õý³£ÏÔʾÉÏÒ»ÏÊý*/
voidnomlastpos(){
wmove(curw,lastcurpos/m_conf.m_col,(lastcurpos%m_conf.m_col)
*m_conf.m_wight/m_conf.m_col+m_conf.m_col);
wprintw(curw,"%s",lastscrpos->item);
}
/*ÏÔʾһҳº¯Êý*/
voiddisponepage(first)
structmenu*first;
{
shortcol,row;
begin=first;/*beginΪ±¾Ò³Ê×Ö¸Õë*/
for(row=0;row/td>
for(col=0;col/td>
/*m_conf.m_wight/m_colΪÿһ²Ëµ¥ÏîÓ¦Õ¼ÁÐÊý*/
wmove(curw,row,col*m_conf.m_wight/m_conf.m_col+m_conf.m_col);
wprintw(curw,"%s",first->item);
wrefresh(curw);
last=first;
first=first->next;
if(first==NULL){
break;
}
}
}
}
/*ÏÔʾÉÏÒ»Ðк¯Êý*/
voiddispprevline(flag)
charflag[2];/*L-×ó¹â±êÒýÆðU-ÉϹâ±êÒýÆð*/
{
structmenu*tmppos;
inttmpcurpos;
tmpcurpos=curpos;
tmppos=scrpos;
if(flag[0]=='U'){
while(tmpcurpos%m_conf.m_col!
=0){
tmppos=tmppos->prev;
tmpcurpos--;
}
tmppos=tmppos->prev;
}
for(tmpcurpos=m_conf.m_col-1;tmpcurpos>=0;tmpcurpos--){
wmove(curw,0,(tmpcurpos%m_conf.m_col)
*m_conf.m_wight/m_conf.m_col+m_conf.m_col);
wprintw(curw,"%s",tmppos->item);
begin=tmppos;/*beginΪ±¾Ò³Ê×Ö¸Õë*/
last=tmppos;
tmppos=tmppos->prev;
if(tmppos==NULL)
break;
}
wrefresh(curw);
}
/*ÏÔʾÏÂÒ»Ðк¯Êý*/
voiddispnextline(flag)
charflag[2];/*R-ÓÒ¹â±êÒýÆðD-Ϲâ±êÒýÆð*/
{
structmenu*tmppos;
inttmpcurpos;
tmpcurpos=curpos;
tmppos=scrpos;
if(flag[0]=='D'){
while(tmpcurpos%m_conf.m_col!
=m_conf.m_col-1){
tmppos=tmppos->next;tmpcurpos++;
}
tmppos=tmppos->next;
}
for(tmpcurpos=0;tmpcurpos wmove(curw,m_conf.m_lengh-1,(tmpcurpos%m_conf.m_col) *m_conf.m_wight/m_conf.m_col+m_conf.m_col); wprintw(curw,"%s",tmppos->item); last=tmppos;/*lastΪ±¾Ò³×îºóÒ»¸ö½áµãÖ¸Õë*/ begin=tmppos;tmppos=tmppos->next; if(tmppos==NULL) break; } } /*È¡Ö¸¶¨²Ëµ¥²ÎÊýº¯Êý*/ voidgetmenuconf(menu_code) shortmenu_code; { FILE*fp; charmenu_buff[0x100]; if((fp=fopen("menu.conf","r"))==NULL){ fprintf(stderr,"cannotopenmenuconfigfile"); return; } while(fgets(menu_buff,0x100,fp)! =NULL){ get_m_conf(menu_buff); if(m_conf.menu_code==menu_code) break; } return; } /*È¡Ö¸¶¨²Ëµ¥²ÎÊý´¦Àíº¯Êý*/ voidget_m_conf(menu_conf) char*menu_conf; { registeri,j,k; charbuff[20]; j=k=0; for(i=0;i if(menu_conf[i]=='! '){ j++; if(j==1){ k=i+1; continue; } switch(j){ case2: memcpy(buff,&menu_conf[k],i-k); buff[i-k]=0; m_conf.menu_code=atoi(buff); k=i+1; break; case3: memcpy(buff,&menu_conf[k],i-k); buff[i-k]=0; m_conf.last_code=atoi(buff); k=i+1; break; case4: memcpy(buff,&menu_conf[k],i-k); buff[i-k]=0; m_conf.bord_flag=atoi(buff
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 创建 菜单