(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% 的 心靈捕手