精華區beta SetupBBS 關於我們 聯絡資訊
(1) 剛剛寫了快速切換選單的程式 歡迎大家多多指教.... 想在哪裡可以啟動快速切換選單 就在該段程式內加入 addmenu() 就行了 (2) doaddmenu() 之使用方式 int doaddmenu(cmdtitle,cmdtable,iniy,maxcol,currx) struct commands cmdtable[]; // 和 domenu() 的 cmdtable 相同格式 int iniy; // 切換選單從第幾行開始 int maxcol; // 每一列有幾個選項 int currx; // 初始選項 (3) menu.c : /*-------------------------------------- */ /* ADDMENU */ /* yaudeh.bbs@will.m1.ntu.edu.tw */ /* 1998 8 22 */ /*---------------------------------------*/ int Favor(),m_read(),note(),order_song(),cal(),t_query(),t_monitor(), t_chat(),Goodbye(),x_note(); static struct commands addmenulist[] = { m_read,PERM_READMAIL, "查看信箱", Favor,0, "我的最愛", addboardmenu,0, "看板選單", addusermenu,PERM_LOGINOK, "個人資料", addrecordmenu,0, "各種資料", cal,0, "小計算機", t_chat,PERM_CHAT, "茶樓聊天", t_query,0, "查詢網友", t_monitor,PERM_BASIC, "追蹤網友", note,PERM_LOGINOK, "刻留言板", order_song,PERM_LOGINOK, "點歌給人", Goodbye,0, "下站休息", NULL, 0, NULL}; int showaddmenu(cmdtable,iniy,maxcol,x) struct commands cmdtable[]; int iniy; int maxcol; int x; { int ix; ix =0; while(cmdtable[ix].desc != NULL) { if (ix%maxcol==0) { move(iniy+1+(ix/maxcol),0); clrtoeol(); } if (HAS_PERM(cmdtable[ix].level)) { if(ix==x) prints("(%c)%8s ",'A'+ix,cmdtable[ix].desc); else prints("(%c)%8s ",'A'+ix,cmdtable[ix].desc); } else { if(ix==x) prints("(%c)%8s ",'A'+ix,cmdtable[ix].desc); else prints("(%c)%8s ",'A'+ix,cmdtable[ix].desc); } ix++; } { int c; for(c=0;(ix%maxcol) && c<maxcol-(ix%maxcol) ;c++) { prints("%12s"," "); } } return ix; } int doaddmenu(cmdtitle,cmdtable,iniy,maxcol,currx) struct commands cmdtable[]; int iniy; int maxcol; int currx; { int cmd,totalcmd; move(iniy,0); clrtoeol(); prints("─── %12s ───────────────(再按一次 Ctrl+Z 離開)──" ,cmdtitle); do { totalcmd=showaddmenu(cmdtable,iniy,maxcol,currx); cmd=egetch(); switch(cmd) { case Ctrl('Z'): return 0; break; case KEY_UP: currx=(currx-maxcol >= 0 ) ? currx-maxcol : currx; break; case Ctrl('R'): if (currutmp->msgs[0].last_pid) { show_last_call_in(); my_write(currutmp->msgs[0].last_pid, "水球丟回去:"); } break; case Ctrl('U'): t_users(); return 0; break; case KEY_DOWN: currx=(currx+maxcol < totalcmd) ? currx+maxcol : currx; break; case KEY_RIGHT: currx=(currx+1)%totalcmd; break; case KEY_LEFT: currx=(currx-1+totalcmd)%totalcmd; break; case ' ': case '\r': case '\n': if (HAS_PERM(cmdtable[currx].level)) { (*cmdtable[currx].cmdfunc) (); return 1; } break; default: if (cmd >= 'a' && cmd <='z') currx=(cmd -'a'); if (cmd >= 'A' && cmd <='Z') currx=(cmd -'A'); break; } }while(currx >=0 && currx < totalcmd); return 0; } int addmenu() { doaddmenu("快速切換選單",addmenulist,20,6,1); } /* 有任何問題請 mailto://yaudeh.bbs@will.m1.ntu.edu.tw */ -- ◢◣◢◣ ████ ※ 發信站 :心靈捕手/will.m1.ntu.edu.tw/140.112.241.115 ◥██◤ By: yaudeh From: 140.112.251.57 ◥◤ -- 100% 的 心靈捕手