📄 menu.cpp
字号:
////////////////////////////////////////////
// //
// Menu.cpp //
// 菜单类实现 //
// 系统菜单专用 //
// 最后更新时间:2004年4月23日11:34 //
// //
////////////////////////////////////////////
#include <string.h>
#include <conio.h>
#include "Menu.h"
extern Window winEdit;
Menu::Menu()
{
// 初始化
// 无菜单项
TotItem = -1;
}
Menu::~Menu()
{
}
void Menu::SetName(const char MenuName[MaxLenOfMenuName], const int Seat)
{
// 设置名字
strcpy(Name, MenuName);
// 设置高亮字符位置
BrightSeat = Seat;
}
void Menu::SetMessage(const char Mess[MaxLenOfMessage])
{
// 设置说明信息
strcpy(Message, Mess);
}
void Menu::SetPosition(const int Seat)
{
// 设置位置
Position = Seat;
}
void Menu::SetWide(const int Width)
{
// 设置宽度
Wide = Width;
}
void Menu::AddItem(const char NewItem[MaxLenOfItem], const char Message[MaxLenOfMessage], const int Seat)
{
// 添加菜单项
TotItem ++;
// 设置菜单项名
strcpy(Item[TotItem], NewItem);
// 设置菜单项说明信息
strcpy(ItemMessage[TotItem], Message);
// 设置菜单项高亮字符位置
ItemBrightSeat[TotItem] = Seat;
if (NewItem[0] == '-')
{
// 是分隔符
Separate[TotItem] = true;
}
else
{
// 不是分隔符
Separate[TotItem] = false;
}
}
void Menu::ActiveMenu()
{
// 激活菜单
// 打印菜单名
gotoxy(Position - 1, 1);
SetColor(BLACK, GREEN);
cprintf(" %s ", Name);
// 打印高亮字符
gotoxy(Position + BrightSeat, 1);
SetColor(RED, GREEN);
cprintf("%c", Name[BrightSeat]);
if (MenuOn)
{
// 菜单是打开的,需打开菜单
Open();
}
else
{
// 打印菜单底部信息栏
PrintMessage();
}
}
void Menu::InactiveMenu()
{
// 隐藏菜单
// 打印菜单名
gotoxy(Position - 1, 1);
SetColor(BLACK, WHITE);
cprintf(" %s ", Name);
// 打印高亮字符
gotoxy(Position + BrightSeat, 1);
SetColor(RED, WHITE);
cprintf("%c", Name[BrightSeat]);
if (MenuOn)
{
// 菜单是打开的,需关闭菜单
Close();
}
}
void Menu::ActiveItem(const int ItemNo)
{
// 隐藏菜单项
// 打印菜单项名
gotoxy(Position, ItemNo + 3);
SetColor(BLACK, GREEN);
cprintf(" %s ", Item[ItemNo]);
// 打印菜单项高亮字符
SetColor(RED, GREEN);
PrintChar(ItemNo + 3, Position + ItemBrightSeat[ItemNo] + 1, Item[ItemNo][ItemBrightSeat[ItemNo]]);
// 打印菜单项说明信息
PrintMessage(ItemNo);
}
void Menu::InactiveItem(const int ItemNo)
{
// 隐藏菜单项
if (IsSeparator(ItemNo))
{
// 分隔符
// 打印边框符号
SetColor(BLACK, WHITE);
PrintChar(ItemNo + 3, Position - 1, 195);
// 打印分隔符
for (int i = 0; i < Wide + 1; i++)
{
PrintChar(ItemNo + 3, Position + i, 196);
}
// 打印边框符号
PrintChar(ItemNo + 3, Position + Wide + 1, 180);
}
else
{
// 不是分隔符
PrintItemName(ItemNo);
}
}
void Menu::Open()
{
// 打开菜单
// 设置颜色
SetColor(BLACK, WHITE);
// 打印上下边框
for (int i = Position; i < Position + Wide + 1; i++)
{
PrintChar(2, i, 196);
PrintChar(TotItem + 4, i, 196);
}
// 打印左右边框
for (i = 3; i <= TotItem + 3; i++)
{
PrintChar(i, Position - 2, 32);
PrintChar(i, Position - 1, 179);
PrintChar(i, Position + Wide + 1, 179);
PrintChar(i, Position + Wide + 2, 32);
}
// 打印4个角
PrintChar(2, Position - 2, 32);
PrintChar(2, Position - 1, 218);
PrintChar(2, Position + Wide + 1, 191);
PrintChar(2, Position + Wide + 2, 32);
PrintChar(TotItem + 4, Position - 2, 32);
PrintChar(TotItem + 4, Position - 1, 192);
PrintChar(TotItem + 4, Position + Wide + 1, 217);
PrintChar(TotItem + 4, Position + Wide + 2, 32);
// 打印菜单项
for (i = 0; i <= TotItem; i++)
{
InactiveItem(i);
}
// 激活第1项
ActiveItem(0);
// 打印菜单右侧阴影
SetColor(LIGHTGRAY, BLACK);
for (i = 0; i <= TotItem + 2; i++)
{
if (x0 + i <= TotRoomLine)
{
// 阴影下是编辑窗口文本
PrintChar(i + 3, Position + Wide + 3, Text[x0 + i]->Line[Position + Wide + 1]);
PrintChar(i + 3, Position + Wide + 4, Text[x0 + i]->Line[Position + Wide + 2]);
}
else
{
// 阴影下为空
PrintChar(i + 3, Position + Wide + 3, ' ');
PrintChar(i + 3, Position + Wide + 4, ' ');
}
}
// 打印菜单底部阴影
for (i = 0; i <= Wide + 2; i++)
{
if (x0 + TotItem + 2 <= TotRoomLine)
{
// 阴影下是编辑窗口文本
PrintChar(TotItem + 5, Position + i, Text[x0 + TotItem + 1]->Line[Position + i - 2]);
}
else
{
// 阴影下为空
PrintChar(TotItem + 5, Position + i, ' ');
}
}
}
void Menu::Close()
{
// 关闭菜单
// 刷新标题,删掉菜单上部边框
winEdit.RefreshTitle();
// 恢复编辑窗口文本
SetColor(YELLOW, BLUE);
for (int i = 3; i <= TotItem + 5; i++)
{
PrintLine(x0 + i -3);
}
}
void Menu::PrintMenuName()
{
// 打印菜单名
gotoxy(Position, 1);
SetColor(BLACK, WHITE);
cprintf("%s", Name);
// 打印菜单高亮字符
gotoxy(Position + BrightSeat, 1);
SetColor(RED, WHITE);
cprintf("%c", Name[BrightSeat]);
}
void Menu::PrintItemName(const int ItemNo)
{
// 打印菜单项名
gotoxy(Position, ItemNo + 3);
SetColor(BLACK, WHITE);
cprintf(" %s ", Item[ItemNo]);
// 打印菜单项高亮字符
SetColor(RED, WHITE);
PrintChar(ItemNo + 3, Position + ItemBrightSeat[ItemNo] + 1, Item[ItemNo][ItemBrightSeat[ItemNo]]);
}
void Menu::PrintMessage()
{
// 打印菜单说明信息
::SetColor(BLACK, WHITE);
PrintChar(25, 10, 179);
cprintf(" %s", Message);
clreol();
}
void Menu::PrintMessage(const int ItemNo)
{
// 打印菜单项说明信息
::SetColor(BLACK, WHITE);
PrintChar(25, 10, 179);
cprintf(" %s", ItemMessage[ItemNo]);
clreol();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -