- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中南大学 操作系统实验报告课程设计报告
操作系统实验报告
界面设计
菜单
菜单包括菜单栏,菜单,菜单项,一个菜单栏可以包括N个菜单,一个菜单可以包括菜单项。C语言设计菜单的思想是用双向链表,先保存绘图区的内容,再在上面画菜单。
菜单结构图
数据结构
菜单栏:
typedef struct menubar_s{
int number,x,y,barheight,baritemwidth;/*number用来记录菜单项的数目,x,y用来记录菜单栏在屏幕上的位置,barheight用来控制菜单栏的高度,baritemwidth用来控制每项菜单的宽度*/
struct menu_s *mhead; /*指向第一个菜单*/
struct menu_s *mtail; /*指向最后一个菜单*/
struct menu_s *mpoint; /*当用户按下左右箭头时用来记录指向那个菜单,初始指向mhead*/
void (* docommand)(); /*菜单时间的处理函数*/
}MenuBar;
菜单:
typedef struct menu_s{
int number; /*菜单是菜单栏中的第几项*/
int subwidth; /*菜单项的宽度*/
int subcount; /*菜单项的数目*/
char *content; /*菜单显示的字符串/
struct menu_s *next; /*指向下一个菜单,如果是结尾菜单,则为NULL*/
struct menu_s *before; /*指向前一个菜单,如果是头菜单,则为NULL*/
struct submenu_s *sub; /*指向当前激活的菜单项*/
struct submenu_s *head; /*指向第一个菜单项*/
struct submenu_s *tail; /*指向最后一个菜单项*/
}Menu;
菜单项:
typedef struct submenu_s{
int number; /*菜单项是菜单中的第几项*/
int isactive; /*是否激活*/
char *content; /*显示的字符串*/
struct submenu_s *next; /*指向下一个菜单项*/
struct submenu_s *before; /*指向前一个菜单项*/
}submenu;
函数实现
菜单构造函数
/*该函数的功能主要是根据指定的menutitle字符串,往菜单栏中添加一项菜单*/
void addmenu(char *menutitle){
if(Mb==NULL){/*如果Mb(全局MenuBar类型的变量)为NULL,说明没有初始化菜单栏,要初始化*/
if((Mb=(MenuBar *)malloc(sizeof(MenuBar)))==NULL)
doerror(System error);
Mb-number=0; /*菜单栏中菜单数目为0*/
Mb-mpoint=Mb-mhead=Mb-mtail=NULL;
Mb-x=0;
Mb-y=0; /*位置于屏幕上(0,0)*/
Mb-barheight=18; /*菜单栏高度为18*/
Mb-baritemwidth=100; /*每项菜单的宽度为100*/
Mb-docommand=docommand; /*设置事件处理函数为docommand()*/
}
if(Mb-mtail==NULL){ /*如果Mb-mtail为NULL,说明要先构造Mb-mhead*/
if((Mb-mhead=(Menu *)malloc(sizeof(Menu)))==NULL)
doerror(System error);
Mb-mhead-before=NULL;
Mb-mtail=Mb-mhead;
}else {
if((Mb-mtail-next=(Menu *)malloc(sizeof(Menu)))==NULL)
doerror(System error);
Mb-mtail-next-before=Mb-mtail;
Mb-mtail=Mb-mtail-next;
}
Mb-mtail-number=Mb-number; /*当前添加进去的菜单位置,下面有Mb-number的自加*/
Mb-mtail-subwidth=0; /*菜单项的宽度为0*/
Mb-mtail-subcount=0; /*菜单项数目为0/
Mb-mtail-content=menutitle; /*把菜单的字符串指针指向menutitle*/
Mb-mtail-next=NULL;
Mb-mtail-sub=Mb-mtai
文档评论(0)