这是我的滚动菜单的代码,它根据3个向量显示不同的值,welcomeMenuVector,menuOptionsVector和menuActionVector:
welcomeMenuVector - 保存标题功能
menuOptionsVector - 保存滚动菜单的菜单选项
menuActionsVector - 保存选择菜单选项后要执行的功能
vector<string> menuOptionsVector;
vector<function<void()>> menuActionsVector;
vector<function<void()>> welcomeMenuVector;
void scrollingMenu(){
ShowConsoleCursor(false);
int pointer = 0;
while (true){
system("cls");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
welcomeMenuVector[0]();
for (unsigned int i = 0; i < menuOptionsVector.size(); ++i){
if (i == pointer){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
cout << center("> " + menuOptionsVector[i] + " <" ,getWindowWidth()) <<endl;
}
else{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << center(" " + menuOptionsVector[i] + " ", getWindowWidth()) << endl;
}
}
while (true){
if (GetAsyncKeyState(VK_UP) != 0){
pointer -= 1;
if (pointer == -1){
pointer = menuOptionsVector.size() - 1;
}
break;
}
else if (GetAsyncKeyState(VK_DOWN) != 0){
pointer += 1;
if (pointer == menuOptionsVector.size()){
pointer = 0;
}
break;
}
else if (GetAsyncKeyState(VK_RETURN) != 0){ //when enter key is pressed
menuActionsVector[pointer]();
}
}
Sleep(100);
}
}
在我需要调用 scrollingMenu()之前,我需要在向量中输入菜单标题,菜单选项和菜单功能。因此,在将值输入到向量之前,我必须清除所有3个向量,因为内部会有值,因为它可能会被更早的其他菜单使用。
这是我的主页面,用户页面和添加用户页面:
void mainPage(){
clearMenuVectors();
welcomeMenuVector = { [](){mainPageWelcome(); } };
menuOptionsVector = { "Login", "Exit" };
menuActionsVector = {
[](){ userPage(); },
[](){ exit(0); }
};
scrollingMenu();
}
void userPage(){
clearMenuVectors();
welcomeMenuVector = { [](){userPageWelcome(); } };
menuOptionsVector = { "Add User", "Update User", "Delete User", "Exit" };
menuActionsVector = {
[](){ addUsers(); },
[](){ updateUsers(); },
[](){ deleteUsers(); },
[](){ exit(0); }
};
scrollingMenu();
}
void addUsers(){
clearMenuVectors();
welcomeMenuVector = { [](){cout << center("Which type of user would you like to add?", getWindowWidth()) << endl;; } };
menuOptionsVector = { "Add Admin", "Add Scheduler", "Add Professional", "Exit" };
menuActionsVector = {
[](){ /*addUser();*/ },
[](){ /*updateUsers();*/ },
[](){ /*deleteUsers();*/ },
[](){ exit(0); }
};
}
我的主页首先工作正常,我能够向上移动在点击进入登录菜单选项后,它会转到用户页面,但是当我在 userPage <时出现问题/ strong>,我仍然可以看到 userPage 的菜单选项,但是当我向上/向下移动时,它会改变 addUsers 的菜单选项(我还没有#39) ;甚至点击输入),即使我没有向上/向下移动我点击添加用户选项,没有任何反应,我不知道这里有什么问题。
答案 0 :(得分:1)
如果你改变了
[](){ /*addUser();*/ },
要 {cout&lt;&lt; “添加用户选项1”&lt;&lt; ENDL; },
然后连续写入,然后按下键。
密钥当前是上升还是下降。如果最重要的一点 设置,键是关闭,如果设置了最低有效位,则 在上一次调用GetAsyncKeyState之后按下了键。
所以你需要检查最低有效位。在这种情况下
if (GetAsyncKeyState(VK_RETURN) != 0)
应该是
if (GetAsyncKeyState(VK_RETURN) & 0x1)