亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Unix下用C編寫類Windows菜單

2019-11-17 05:39:20
字體:
來源:轉載
供稿:網友

  在開發程序時,程序的界面、開放性是兩個非常重要的方面,目前,在Unix系統下運行的程序的界面大都比較死板,而且,在進行功能擴充時也不是很方便。那么,能不能設計一個象 Windows那樣能夠按照用戶要求隨意調整界面,功能擴充方便的程序呢?答案是肯定的。筆者通過實踐,設計了一個菜單程序,使用戶在對菜單的顯式樣式不滿足時,只需通過對菜單參數文件進行操作即可完成對菜單位置、寬度、長度、是否有邊框等進行調整;在用戶需要進行功能擴充時,也無須改動源程序,只須對參數文件進行操作就可將新增功能掛到菜單上。
一 參數文件說明
本程序需要借肋兩個參數文件來實現:
(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
#define ESC 27
#define ENT 13
#define REFRESH 12
#define MAX_M 10 /* 菜單最大層數 */

void initial(),nomlastpos(),revcurpos(),disponepage(),dispPRevline();
void dispnextline(),domenu(),getmenUConf(),keycont();
void getitem(), get_m_conf(), get_m_item(),clearwin(),execprog();
/* 標識每一菜單項的結構 */
struct menu {
short menu_code; /* 所屬菜單代號 */
short item_order; /* 項順序號 */
char item[20]; /* 菜單項名稱 */
char prog[80]; /* 本項菜單執行程序 */
short submenu_code; /* 下一級菜單編號 */
struct menu *next; /* 指向上一項的指針 */
struct menu *prev; /* 指向下一項的指針 */
} m_item,*head,*this,*new,*last,*scrpos,*lastscrpos,*begin,*lastbegin,*lastscr[MAX_M];
/* 標識每一菜單內容的結構 */
struct menuconf {
short menu_code; /* 菜單代號 */
short last_code; /* 上一級菜單代號 */
short bord_flag; /* 邊框標志 0--無邊框 1--有邊框 **/
short m_wight; /* 菜單顯示寬度 */
short m_lengh; /* 每一行項數 */
short m_col; /* 菜單列數 */
short m_bx; /* 菜單起始橫坐標 */
short m_by; /* 菜單起始縱坐標 */
} m_conf;
WINDOW *menuwin, *boxwin, *curw, *lastw[MAX_M], *workwin;
long curpos, lastcurpos, lastscrcurpos, lastmenucur[MAX_M];
short menu_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();
}

/* 取菜單各項參數函數 */
void getitem()
{
FILE *fp;
char buff[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=(struct menu*)malloc(sizeof(struct menu));
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);
}
/* 菜單處理函數 */
void domenu(curscrp, curp)
struct menu *curscrp;
int curp;
{
int i, x, y;
struct menu *mpos;

this = head;
disponepage(this);
curpos = curp; scrpos = curscrp;
lastcurpos = lastscrcurpos = 0;
revcurpos();
for(;;) {
switch (wgetch(curw)) {
case ENT:
/* 有下一級菜單 */
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;
case ESC:
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':
case REFRESH: /* 重顯屏幕 */
wrefresh(curscr);
break;
case KEY_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;
case KEY_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;
case KEY_UP: /* 上光標鍵 */
lastcurpos = curpos; lastscrpos = scrpos;
mpos = scrpos;
for(i=0; i/td>
if ( mpos->prev != NULL ) mpos=mpos->prev;
else break;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕精品| 亚洲美女av在线| 亚洲图片欧洲图片av| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日本亚洲视频| 中国日韩欧美久久久久久久久| 亚洲综合在线播放| 亚洲精品国产精品久久清纯直播| 亚洲精品日韩在线| 成人羞羞国产免费| 欧美日韩午夜视频在线观看| 精品中文字幕在线2019| 国产极品jizzhd欧美| 亚洲综合中文字幕在线观看| 国产成人精品一区二区| 国产一区二区三区视频| 日韩精品视频在线观看网址| 热久久免费国产视频| 精品呦交小u女在线| 国产成人精品免高潮费视频| 欧美黑人性猛交| 亚洲国产欧美久久| 最近中文字幕日韩精品| 欧美夫妻性生活xx| 国产成人精品久久久| 国产精品久久久久久久久久新婚| 色综合视频一区中文字幕| 欧美国产日韩免费| 成人网在线免费看| 国产精品久久久久9999| 精品日韩中文字幕| 57pao成人国产永久免费| 久久久黄色av| 久久艹在线视频| 欧美大片va欧美在线播放| 热99在线视频| 久久国产精品99国产精| 亚洲电影免费观看高清完整版| 久久亚洲精品中文字幕冲田杏梨| 亚洲xxx视频| 欧美日韩爱爱视频| 亚洲欧洲国产精品| 久久人人爽亚洲精品天堂| 国产精品一区二区三区成人| 欧美日韩精品在线视频| 成人福利视频在线观看| 中文字幕精品视频| 亚洲精品ady| 日韩av大片免费看| 国产丝袜一区视频在线观看| 91日本视频在线| 亚洲精品suv精品一区二区| 在线观看欧美视频| 综合欧美国产视频二区| 国产a∨精品一区二区三区不卡| 国产欧美一区二区三区在线| 国产精品一区电影| 55夜色66夜色国产精品视频| 欧美电影在线免费观看网站| 亚洲日本中文字幕免费在线不卡| 在线不卡国产精品| 亚洲国产精品va在线| 欧美与黑人午夜性猛交久久久| 欧美一级视频一区二区| 久久中文字幕国产| 亚洲一区二区中文字幕| 欧美日韩免费在线| 91亚洲精品一区二区| 成人有码在线播放| 成人女保姆的销魂服务| 一色桃子一区二区| 国产视频精品在线| 欧美性xxxxx极品| 北条麻妃一区二区三区中文字幕| 2019中文字幕免费视频| 久久国产视频网站| 精品国产一区二区三区四区在线观看| 精品无人区乱码1区2区3区在线| 久久久97精品| 91国内揄拍国内精品对白| 欧美性高潮床叫视频| 国产精品专区一| 国产精品高潮视频| 日韩欧美在线视频观看| 最新国产精品拍自在线播放| 三级精品视频久久久久| 国产a∨精品一区二区三区不卡| 久久精品最新地址| 久久影院资源站| 久久久www成人免费精品| 国产精品福利在线| 欧美精品午夜视频| 91免费高清视频| 97久久精品在线| 亚洲第一av网| 中文字幕日韩有码| 日韩成人av网址| 91精品综合久久久久久五月天| 日韩av电影手机在线| 色无极亚洲影院| 国产精品欧美激情| 在线看福利67194| 日本成人在线视频网址| xvideos国产精品| 欧美激情一区二区三区高清视频| 国产精品视频成人| 国产精品高清在线观看| 亚洲第一网站男人都懂| 欧美另类精品xxxx孕妇| 九九热这里只有精品免费看| 成人淫片在线看| 色妞在线综合亚洲欧美| 国产精品igao视频| 国产一区二区黄| 国内精品久久久| 国产欧美日韩中文字幕| 亚洲图片欧美日产| 久久精品视频99| 日韩精品小视频| 亚洲电影免费观看高清完整版在线观看| 美日韩精品免费观看视频| 97**国产露脸精品国产| 国产婷婷成人久久av免费高清| 成人午夜在线观看| 亚洲男人的天堂在线| 日韩av影视在线| 神马久久久久久| 国产精品自拍小视频| 国产精品三级美女白浆呻吟| 成人黄色在线观看| 91久久久久久久一区二区| 亚洲视频777| 国产精品亚洲视频在线观看| 欧美性极品xxxx做受| 欧美精品生活片| 日韩理论片久久| 久久久女女女女999久久| 欧美成人sm免费视频| 久久久久久久亚洲精品| 免费91麻豆精品国产自产在线观看| 国产精品久久久久7777婷婷| 91亚洲国产成人久久精品网站| 国产在线日韩在线| 日韩在线www| 日韩视频免费在线| 欧美做受高潮电影o| 久久免费观看视频| 国产婷婷色综合av蜜臀av| 欧美老肥婆性猛交视频| 色妞久久福利网| 欧美激情精品久久久久久久变态| 亚洲综合精品一区二区| 中国日韩欧美久久久久久久久| 国产精品久久久久福利| 国产精品主播视频| 久久伊人免费视频| 国产一区二区三区在线| 九九热精品视频| 欧美久久精品午夜青青大伊人| 91精品视频在线免费观看| 日韩av网址在线| 精品日本高清在线播放| 青青久久av北条麻妃黑人| 日韩黄在线观看|