📄 menu.cpp
字号:
/*******************************************************************************
模 块: 菜单.
功 能: 包括菜单条和子菜单.
程序员: 雷中南.
版 本: v1.1
时 间: 1999-05-10
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "menu.h"
#include "getcase.h"
#include "def.h"
#include "box.h"
#include "process.h"
#include "sysinfo.h"
//定义子菜单项.
char *sname0[2]={"柜组名细","柜组汇总"};
int eid0[2]={100,101};
char *sname1[2]={"收款员名细","收款员汇总"};
int eid1[2]={110,111};
char *sname2[2]={"营业员名细","营业员汇总"};
int eid2[2]={120,121};
char *sname3[2]={"货品名细","货品汇总"};
int eid3[2]={130,131};
char *sname4[3]={"下载全部数据", "下载更新数据", "上传数据"};
int eid4[3]={140,141,142};
char cmdtemp[50];
MsgBox *err;
Object *KeepAll;
FILE *fp;
GetCase *Item;
//构造函数.
Menu::Menu(char *submenu[],int number)
{
//菜单条.
Mb = new MenuBar(submenu,number);
}
//析构函数.
Menu::~Menu()
{
delete Mb;
}
//运行菜单.
void
Menu::Run()
{
//定义事件变量.
unsigned int TmpEv;
unsigned int Event;
//显示菜单条.
Mb->Show();
for(;;)
{
//运行菜单条.
Mb->Run();
//从队列中取事件.
GetEvent(Event);
switch (Event)
{
//如果是打开子菜单的事件.
case MN_SUBCALL:
jmp:
SubCall();//打开子菜单.
GetEvent(TmpEv);//获取子菜单返回的事件.
switch(TmpEv)
{
//如果是请求前一个子菜单的事件:
case MN_PREVSUBMENU:
//将菜单条的当前焦点左移.
Mb->PrevItem();
goto jmp;
//如果是请求下一个子菜单的事件:
case MN_NEXTSUBMENU:
//将菜单条的当前焦点右移.
Mb->NextItem();
goto jmp;
default:
//如果不属于上面两种事件,那么将取出的事件返回事件队列.
PutEvent(TmpEv);
break;
}
//处理菜单请求.
DoMenu();
break;
//如果是退出.
case EV_QUIT:
return;
}
}
}
//处理菜单事件.
//在此处添加菜单处理程序.
void
Menu::DoMenu()
{
unsigned int Event;
//从队列中获取事件.
GetEvent(Event);
switch(Event)
{
case 100:
//柜组名细.
Item = new GetCase();
Item->GetSales(0);
delete Item;
break;
case 110:
//收款员名细.
Item = new GetCase();
Item->GetSales(1);
delete Item;
break;
case 120:
//营业员名细.
Item = new GetCase();
Item->GetSales(2);
delete Item;
break;
case 130:
//货品名细.
Item = new GetCase();
Item->GetSales(3);
delete Item;
break;
case 101:
//柜组汇总.
Item = new GetCase();
Item->GetTotal(0);
delete Item;
break;
case 111:
//收款员汇总.
Item = new GetCase();
Item->GetTotal(1);
delete Item;
break;
case 121:
//营业员汇总.
Item = new GetCase();
Item->GetTotal(2);
delete Item;
break;
case 131:
//货品汇总.
Item = new GetCase();
Item->GetSales(4);
delete Item;
break;
case 140:
//数据全部下载.
KeepAll = new Object(CreateRect(0,0,639,479));
CloseGraph();
system("cls");
sprintf(cmdtemp, "txzm COM%d B%ld T1 P%s S%s > NULL",
sys->Port, sys->Baud, sys->TelNum, sys->SelfID);
system(cmdtemp);
startGraphics();
delete KeepAll;
fp = fopen(".\\flag.txt", "rt");
fread(cmdtemp, 1, 1, fp);
fclose(fp);
if(atoi(cmdtemp) == 0)
err=new MsgBox("成功完成所有主档的下载.");
else if(atoi(cmdtemp) == 1)
err=new MsgBox("建立通讯连接失败.");
else
err=new MsgBox("数据通讯失败.");
err->Run();
delete err;
break;
case 141:
//下载更新数据.
KeepAll = new Object(CreateRect(0,0,639,479));
CloseGraph();
sprintf(cmdtemp, "txzm COM%d B%ld T2 P%s S%s > NULL",
sys->Port, sys->Baud, sys->TelNum, sys->SelfID);
system(cmdtemp);
startGraphics();
delete KeepAll;
fp = fopen(".\\flag.txt", "rt");
fread(cmdtemp, 1, 1, fp);
fclose(fp);
if(atoi(cmdtemp) == 0)
err=new MsgBox("成功完成立即主档的下载.");
else if(atoi(cmdtemp) == 1)
err=new MsgBox("建立通讯连接失败.");
else
err=new MsgBox("数据通讯失败.");
err->Run();
delete err;
break;
case 142:
//数据上传.
KeepAll = new Object(CreateRect(0,0,639,479));
CloseGraph();
sprintf(cmdtemp, "txzm COM%d B%ld T3 P%s S%s > NULL",
sys->Port, sys->Baud, sys->TelNum, sys->SelfID);
system(cmdtemp);
startGraphics();
delete KeepAll;
fp = fopen(".\\flag.txt", "rt");
fread(cmdtemp, 1, 1, fp);
fclose(fp);
if(atoi(cmdtemp) == 0)
err=new MsgBox("成功完成销售数据的上传.");
else if(atoi(cmdtemp) == 1)
err=new MsgBox("建立通讯连接失败.");
else
err=new MsgBox("数据通讯失败.");
err->Run();
delete err;
break;
default:
break;
}
}
void
Menu::SubCall()
{
//判断当前焦点.
switch (Mb->SubMenuFocus)
{
case 0://如果是菜单条的第一项.
rect = Mb->CalRect(sname0,2);//计算子菜单的位置.
smenu = new SubMenu(sname0, eid0, rect, 2);//产生子菜单.
smenu->Run();//运行子菜单.
delete smenu;//删除子菜单.
break;
case 1://如果是菜单条的第二项.
rect = Mb->CalRect(sname1, 2);//计算子菜单的位置.
smenu= new SubMenu(sname1, eid1, rect, 2);//产生子菜单.
smenu->Run();//运行子菜单.
delete smenu;//删除子菜单.
break;
case 2://如果是菜单条的第三项.
rect = Mb->CalRect(sname2, 2);//计算子菜单的位置.
smenu= new SubMenu(sname2, eid2, rect, 2);//产生子菜单.
smenu->Run();//运行子菜单.
delete smenu;//删除子菜单.
break;
case 3://如果是菜单条的第四项.
rect = Mb->CalRect(sname3, 2);//计算子菜单的位置.
smenu= new SubMenu(sname3, eid3, rect, 2);//产生子菜单.
smenu->Run();//运行子菜单.
delete smenu;//删除子菜单.
break;
case 4://如果是菜单条的第四项.
rect = Mb->CalRect(sname4, 3);//计算子菜单的位置.
smenu= new SubMenu(sname4, eid4, rect, 3);//产生子菜单.
smenu->Run();//运行子菜单.
delete smenu;//删除子菜单.
break;
default:
break;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -