C++ 实现仿 Windows 资源浏览器的前进后退功能,禁用按钮变灰
C++ 实现仿 Windows 资源浏览器的前进后退功能,禁用按钮变灰
这里是一个简单的 C++ 代码示例,演示如何实现仿 Window 资源浏览器的前进后退功能,并将禁用的按钮变成灰色。
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int main()
{
vector<string> history; // 页面历史记录
stack<string> backStack; // 后退栈
stack<string> forwardStack; // 前进栈
history.push_back("www.google.com");
history.push_back("www.baidu.com");
history.push_back("www.zhihu.com");
history.push_back("www.github.com");
int currIndex = 0; // 当前页面索引
// 显示当前页面和可用的操作
cout << "当前页面: " << history[currIndex] << endl;
cout << "可用操作: [1]后退 [2]前进" << endl;
int choice;
cin >> choice;
while (true)
{
if (choice == 1) // 后退
{
if (currIndex > 0)
{
// 将当前页面压入前进栈
forwardStack.push(history[currIndex]);
currIndex--;
// 显示当前页面和可用的操作
cout << "当前页面: " << history[currIndex] << endl;
cout << "可用操作: [1]后退 [2]前进" << endl;
}
else
{
// 已经到达历史记录的最开始,无法后退
cout << "无法继续后退" << endl;
}
}
else if (choice == 2) // 前进
{
if (!forwardStack.empty())
{
// 将当前页面压入后退栈
backStack.push(history[currIndex]);
currIndex++;
// 显示当前页面和可用的操作
cout << "当前页面: " << history[currIndex] << endl;
cout << "可用操作: [1]后退 [2]前进" << endl;
// 从前进栈弹出页面,将其作为当前页面
history[currIndex] = forwardStack.top();
forwardStack.pop();
}
else
{
// 已经到达历史记录的最末尾,无法前进
cout << "无法继续前进" << endl;
}
}
// 判断前进和后退按钮是否可用,并将不可用的按钮变成灰色
if (currIndex == 0)
{
cout << "\033[1;30m[1]后退\033[0m ";
}
else
{
cout << "[1]后退 ";
}
if (forwardStack.empty())
{
cout << "\033[1;30m[2]前进\033[0m" << endl;
}
else
{
cout << "[2]前进" << endl;
}
cin >> choice; // 接收下一次操作
}
return 0;
}
在这个示例中,我们使用了一个vector来存储页面的历史记录,使用两个stack来实现后退和前进功能。我们使用一个currIndex变量来记录当前页面的索引,这样我们就可以轻松地在历史记录中导航。当用户选择后退或前进时,我们将当前页面压入相应的栈中,以便日后使用。如果用户在历史记录的开头或结尾,我们将禁用相应的操作,并将不可用的按钮变成灰色,以便用户知道哪些操作不可用。
代码解析:
- 使用
vector存储页面历史记录,使用stack实现后退和前进功能,方便进行栈操作。 - 使用
currIndex指示当前页面位置,实现页面索引管理。 - 使用 ANSI 转义码
\033[1;30m将禁用按钮设置为灰色,\033[0m恢复默认颜色,实现按钮颜色控制。 - 通过判断
currIndex和forwardStack的状态,控制按钮的可用性和颜色显示。
总结:
这段代码使用简单易懂的方式实现了仿 Windows 资源浏览器的前进后退功能,并通过 ANSI 转义码将禁用按钮变灰,方便用户使用。
原文地址: http://www.cveoy.top/t/topic/nst4 著作权归作者所有。请勿转载和采集!