如何用C语言做下拉菜单

xunyuetian 2005-12-09 06:15:35
课设~急
如何用C语言做下拉菜单
...全文
998 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaochen_2002 2005-12-12
  • 打赏
  • 举报
回复
这个关键是结构的问题,我是做LCD Monitor的,里面的菜单的结构就是用keilC写的.
基本的结构是:
先分Page:每个Page是个大的结构体,里面有很多参数,比如说颜色,菜单的大小,有多少个子项等它的子Page的指针,父Page的指针,以及响应按健的函数指针.这样在不同的Page按不同的key就会做不同的动作.
我觉得关键是你的数据结构要定义好,思路清晰就好了.
屋顶上的老猫 2005-12-12
  • 打赏
  • 举报
回复
下面是一个仿TC界面的部分程序(可以运行、ALT+F打开菜单、ALT+X关闭),你可以参考一下!

#include <bios.h>
#include <conio.h>

int specialkey();

int specialkey() //键盘响应
{
int key;
while(bioskey(1)==0);
key=bioskey(0);
key=key&0xff ? key&0xff:key>>8;
return(key);
}
main()
{
int i,key,key0,key1,y,test;
char *main[]={" File "," Edit "," Run "," Compile "," Project "," Options "," Debug "," Break/Watch"};
char *sub[]={"Load F3","Pick Alt-F3","New","Save F2","Write to","Directory","Change dir","Os shell","Quit Alt-X"};
char buf[16*10*2],buf1[16*2];
textcolor(BLACK);
textbackground(BLUE);
clrscr();
window(1,1,80,1);
textcolor(BLACK);
textbackground(WHITE);
clrscr();
for(i=0;i<8;i++)
cprintf("%s",main[i]);
while(1)
{
key=0;
key=specialkey();
if(key==45){window(1,1,25,80); clrscr(); exit(0);}
if((key==33)||(key==68))
{
textbackground(BLACK);
textcolor(WHITE);
gotoxy(4,1);
cprintf("%s",main[0]);
gettext(4,2,19,11,buf);
window(4,2,19,11);
textbackground(WHITE);
textcolor(BLACK);
clrscr();
window(4,2,19,12);
gotoxy(1,1);
putch(218);
for(i=2;i<16;i++) putch(196);
putch(191);
gotoxy(1,i); putch(179);
gotoxy(16,i); putch(179);
}
gotoxy(1,10);
putch(192);
for(i=2;i<16;i++) putch(196);
putch(217);
for(i=2;i<10;i++)
{
gotoxy(2,i);
cprintf("%s",sub[i-1]);
}
gettext(2,2,18,3,buf1);
textbackground(BLACK);
textcolor(WHITE);
gotoxy(2,2);
cprintf("%s",sub[0]);
y=2;
key0=0;
}
}
blooney 2005-12-09
  • 打赏
  • 举报
回复
楼主,我如果没记错的话

有一本叫做《C语言高级程序设计》中讲了一章的怎么做菜单只类的

书上都有代码

着急的话,拿来参考下还不错:)
RainWindy 2005-12-09
  • 打赏
  • 举报
回复
就是要设计好了,各位高楼已经说的差不多了。

其实你就是指在dos平台下做下拉菜单吧。
屋顶上的老猫 2005-12-09
  • 打赏
  • 举报
回复
以前搞过这个东西,呵呵,蛮有意思的!
屋顶上的老猫 2005-12-09
  • 打赏
  • 举报
回复
呵呵,你是想做文本下的?还是想做图形下的?
菜单要有以下几个部分:
1、菜单的定义
2、保存部分屏幕
3、恢复期望的屏幕
4、用户的响应值传递

文本下的使用ASCⅡ来画框,结合gettext()和puttext()完成比较容易一些!图形下的就比较难喽,因为它比文本菜单灵活的多也就复杂的多,不过图形下菜单也可以不受平台的限制进行汉化也最大一个买点!

ningzhiyu 2005-12-09
  • 打赏
  • 举报
回复
也不是一定很难的,不过肯定很繁杂:)

如果不要求处理特殊键
做一个类似tc编辑环境的那种菜单还是可以的

和xiaocai0001(萧筱雨) ( ) 说的差不多,检测按键,根据按键处理:清空某个区域,重新画区域,填充菜单。
terryjwf 2005-12-09
  • 打赏
  • 举报
回复
我也想知道,帮你up!
whatsouta 2005-12-09
  • 打赏
  • 举报
回复
难于蜀道
dragonzxh 2005-12-09
  • 打赏
  • 举报
回复
C语言做还是Win32做啊?
hiahiahiahia~~~~~
goodluckyxl 2005-12-09
  • 打赏
  • 举报
回复
SDK下界面都要绘图出来
所有消息传递都是自己搞的
参考windows程序设计有代码
xiaocai0001 2005-12-09
  • 打赏
  • 举报
回复
ON_COMMAND_CLICK --> ShowMenu()

基本上就是基于这个思想的.
xinlingwuyu 2005-12-09
  • 打赏
  • 举报
回复
汗~~~~

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧