?? 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 + -