Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主菜单键C++; 我正在创建一个简单的C++控制台程序来娱乐,我正在寻找一种方法,让用户在任何时候都能返回到“主菜单”输出,如果它们要命中函数键,比如F1或F2。_C++_Windows - Fatal编程技术网

主菜单键C++; 我正在创建一个简单的C++控制台程序来娱乐,我正在寻找一种方法,让用户在任何时候都能返回到“主菜单”输出,如果它们要命中函数键,比如F1或F2。

主菜单键C++; 我正在创建一个简单的C++控制台程序来娱乐,我正在寻找一种方法,让用户在任何时候都能返回到“主菜单”输出,如果它们要命中函数键,比如F1或F2。,c++,windows,C++,Windows,我是否可以让我的程序随时准备接受此键,或者我是否需要有一个开关语句,可以在程序每次接受用户输入时调用“主菜单”打印功能?对于基于控制台的程序来说,这可能是无法实现的吗 编辑:目前,我只使用基于Windows的程序。如果您使用的是Windows: 您可以使用GetKeyState或GetAsyncKeyState,但这不会提供keydown/keyup事件。它只会告诉你哪些键当前处于关闭状态 因此,如果需要获取keydown/keyup事件,可以安装一个钩子。控制台窗口有一个窗口句柄,由Windo

我是否可以让我的程序随时准备接受此键,或者我是否需要有一个开关语句,可以在程序每次接受用户输入时调用“主菜单”打印功能?对于基于控制台的程序来说,这可能是无法实现的吗


编辑:目前,我只使用基于Windows的程序。

如果您使用的是Windows:

您可以使用GetKeyState或GetAsyncKeyState,但这不会提供keydown/keyup事件。它只会告诉你哪些键当前处于关闭状态

因此,如果需要获取keydown/keyup事件,可以安装一个钩子。控制台窗口有一个窗口句柄,由Windows中的代码拥有,还有一个消息泵,也由Windows中的代码拥有

在使用SetWindowsHookEx安装WH_CALLWNDPROC钩子以侦听发送到控制台窗口的消息时,可以使用GetConsoleWindowt获取控制台窗口的窗口句柄


你可以试试WH_MSGFILTER挂钩。我不知道这是否适用于控制台窗口,但如果它确实有效,则会生成较少的可忽略消息。

您是否试图让它立即检测按键(如按下,菜单立即显示)或者用户可以按下一个键然后点击回车吗?在C++中这样做的一个便携方法可能是使用<代码> NCurss<代码>库。ῥεῖ 谢谢你的建议!我一直喜欢使用ncurses的想法,尽管我认为到目前为止,ncurses的Windows端口还没有发展到什么程度:(@blackrandt我希望它能立即检测到keypress@darwin80当然,ncurses可以很好地与windows终端配合使用。可移植性是它的全部目的。这个答案假设OP是在windows上的,这在原始问题中没有指定。这在windows以外的系统上不起作用。OP中是否有关于这一点的证据?@jjo通常的做法是在回答问题之前询问OP关于评论中的澄清。很容易获得足够的声誉来评论问题。@jjo感谢您的回答,我会尽快尝试测试这种方法!@πάνταῥεῖ 此用户是