半天的测试,终于找到一种写菜单的简单方法(不用表链库)
在vc6.0中测试#include <stdio.h>
struct tst{ //定义菜单结构体
void (*p)();
struct tst *next;
};
void function1() //菜单动作
{
printf("this is function1\r\n");
}
void function2()
{
printf("this is function2\r\n");
}
struct tst trs(void (*function)(void),struct tst *hh)//菜单内容传递函数
{struct tst gg;
gg.next=hh;
gg.p=function;
return (gg);
}
void main()
{struct tst aa;
struct tst *s;
struct tst bb;
aa=trs(&function1,&bb);
bb=trs(&function2,&aa);
s=&aa;
(*s).p();
s=(*s).next;
(*s).p();
s=(*s).next;
(*s).p();
s=(*s).next;
(*s).p();
s=(*s).next;
(*s).p();
}
这是运行结果
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_614604AQIXQ4.png
(原文件名:菜单测试.png) 呵呵 回复【1楼】aureoleXiaomaGee
-----------------------------------------------------------------------
楼上您是打酱油的。。。。。 好像都是这样写的!
用C来封装 类似C++ 额,新手,不懂! mark 还是古老的BBS(23端口的那种)源码靠谱一些
http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_614625LOKWU2.JPG
(原文件名:bbs.JPG) 一个链表? 结点是函数指针的单循环链表 只是一种方法,这样写不会占用太多内存,只用一个*s作为容器。
不用调用大量的函数库。单片机中简单的菜单也不用动态内存,毕竟实时才是单片机的王道。
如果动态内存可以用类似fat的储存方式,进行扇区标记。 mark! MARK mark 这个要研究研究
前天才研究好函数指针
今天就又来这个了
激_情给予我动力啊 不错 mark下 兄弟,你这不仅仅是一个菜单……是一个状态机链……可以做的事情很多的。
建议仔细挖掘~
一不小心小的状态机调度器/原则就诞生了~
鼓掌~ mark mark mark mark学习下~ 留标记 回复【16楼】Gorgon Meducer傻孩子
-----------------------------------------------------------------------
状态机。。。。。。。。。这个没想过。倒是想过封装一个轮片系统 Gorgon Meducer 傻孩子 老师都鼓掌了,这个要好好研究! 好mark 好mark 谢谢,mark 是打酱油的。。。。。 mark 菜单结构里为什么要有菜单字符串呢?根本在于,让父节点可以看到他下面的成员该显示什么,而不需要执行下面的成员函数。 学习!!! 哪位兄弟能给个实例……菜鸟不知道怎么用…… 记号。 mark mark 不会用VC的人帮忙顶。 第一次看到用(*s).p()的…
直接s->p()不就搞定了嘛,弄的多复杂的… 菜单记号 MARK呵呵 对,直接s->p()不就搞定了嘛
页:
[1]