[英]Graphics Menu in c++
我正在做一個項目,我想制作一個圖形菜單。 我面臨的問題是,在它顯示在我放入 switch 的函數中寫入的任何文本之后。 它返回到主菜單。 我想做一個保留在新功能上的功能,一旦它指向新功能,它就不再與主菜單有關。 直到再次調用該函數。
我希望它是一個簡單的菜單功能,指導我運行。 沒有其他的。
你的幫助意味着分配! 提前致謝。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<iomanip>
#include<fstream>
#include<windows.h>
using namespace std;
int main() {
system("cls");
string Menu[3] = { " Admin", " Customer", " Exit" };
int pointer = 0;
bool flag=true;
while (flag==true)
{
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "Main Menu\n\n";
for (int i = 0; i < 3; ++i)
{
if (i == pointer)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);
cout << Menu[i] << endl;
}
else
{
SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE), 15);
cout << Menu[i] << endl;
}
}
while (true)
{
if (GetAsyncKeyState(VK_UP) != 0)
{
pointer =pointer-1;
if (pointer == -1)
{
pointer = 2;
}
break;
}
else if (GetAsyncKeyState(VK_DOWN) != 0)
{
pointer += 1;
if (pointer == 3)
{
pointer = 0;
}
break;
}
else if (GetAsyncKeyState(VK_RETURN) != 0)
{
switch (pointer)
{
case 0:
{
admin_login();
Sleep(500);
break;
}
case 1:
{
customer_sign();
Sleep(500);
break;
}
case 2:
{
thank_you();
Sleep(800);
break;
}
default:
{
cout<<"Invalid Input! ";
}
}
}
}
Sleep(150);
}
return 0;
}
您的“標志”布爾值需要作為兩個 while 循環的條件進行檢查,而不僅僅是第一個。 當您在菜單選擇上按 Enter 鍵時,您還需要清除控制台。
在檢測到按鍵按下后,在開關盒內,在每種情況下,您都需要將標志布爾值設置為 false,以便停止繪制主菜單,而是開始繪制子菜單。 我無權訪問您的其他功能,因此這里有一個解決方案,以簡化且可重現的概念證明來模擬該行為:
#include<windows.h>
#include <iostream>
using namespace std;
int main()
{
system("cls");
string Menu[3] = { " Admin", " Customer", " Exit" };
int pointer = 0;
bool bMainMenu = true;
while (bMainMenu)
{
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "Main Menu\n\n";
for (int i = 0; i < 3; ++i)
{
if (i == pointer)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);
cout << Menu[i] << endl;
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << Menu[i] << endl;
}
}
while (bMainMenu)
{
if (GetAsyncKeyState(VK_UP)&1)
{
pointer = pointer - 1;
if (pointer == -1)
{
pointer = 2;
}
break;
}
else if (GetAsyncKeyState(VK_DOWN)&1)
{
pointer += 1;
if (pointer == 3)
{
pointer = 0;
}
break;
}
else if (GetAsyncKeyState(VK_RETURN)&1)
{
switch (pointer)
{
case 0:
{
//admin_login();
system("cls");
std::cout << "admin selected\n";
Sleep(1000);
bMainMenu = false;
break;
}
case 1:
{
//customer_sign();
system("cls");
std::cout << "customer selected\n";
Sleep(1000);
bMainMenu = false;
break;
}
case 2:
{
//thank_you();
system("cls");
std::cout << "thank you selected\n";
Sleep(1000);
bMainMenu = false;
break;
}
default:
{
cout << "Invalid Input! ";
}
}
}
}
Sleep(150);
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.