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++_Windows - Fatal编程技术网

C++ 获取当前按键的简单方法

C++ 获取当前按键的简单方法,c++,windows,C++,Windows,我已经开始使用SFML作为我正在开发的代码编辑器的基本图形框架,唯一似乎不能完全正确的事情是键盘输入 在QB64(一种类似于Visual Basic的语言)中,我习惯于使用_keyhit命令(返回虚拟键代码)或inkey$命令(直接返回当前按键的字符)来获取按键。我在寻找一个类似的解决方案在C++(不一定是跨平台,可能很容易实现,连同SFML)< /P> 到目前为止,我尝试使用的是_getch,它似乎不适用于Windows框架,也不适用于SFML,也许我应该为此使用一些Windows.h例程,但

我已经开始使用SFML作为我正在开发的代码编辑器的基本图形框架,唯一似乎不能完全正确的事情是键盘输入

在QB64(一种类似于Visual Basic的语言)中,我习惯于使用_keyhit命令(返回虚拟键代码)或inkey$命令(直接返回当前按键的字符)来获取按键。我在寻找一个类似的解决方案在C++(不一定是跨平台,可能很容易实现,连同SFML)< /P>
到目前为止,我尝试使用的是_getch,它似乎不适用于Windows框架,也不适用于SFML,也许我应该为此使用一些Windows.h例程,但从我所看到的来看,这些例程检查特定的按键,而不是我所需要的。SFML框架提供了“sf::Keyboard::isKeyPressed”,但它也检查特定的按键,但不检查整个键盘,我还尝试创建一个数组,作为从“sf::Keyboard::Key”枚举到ASCII字符的映射,但它不能令人信服,而且,键似乎“粘住了”而且,即使在被释放后,按下的键的字符仍会被读取。

如果您使用的是SFML,它实际上非常简单。您需要使用sf::Event::KeyEvent类(或者在本例中是struct)

不过问题是,你必须从某些方面获得事件。通常,这是从SFML窗口使用的

//assuming your code is already set up for these items...
sf::Event Event;
while (window.GetEvent(Event))
{
    if (Event.Type == sf::Event::KeyPressed)
    {
         //to get the key code, use Event.Key.Code
         //your code
         //for example
         switch(Event.KeyEvent.Code)
         {
             case(sf::Keyboard::Key::Y):
                 //do stuff
                 break;
         }
    }
}
请注意,我已经有一段时间没有使用SFML了,所以我不能100%确定它是否可以使用switch语句。与
=
相比,在
if-else-if-else
语句中,也将起作用。 也可能有其他方法可以在没有窗口的情况下获得定义的
sf::Event

否则,它相当简单。

如果您使用的是SFML,它实际上相当简单。您需要使用sf::Event::KeyEvent类(或者在本例中是struct)

不过问题是,你必须从某些方面获得事件。通常,这是从SFML窗口使用的

//assuming your code is already set up for these items...
sf::Event Event;
while (window.GetEvent(Event))
{
    if (Event.Type == sf::Event::KeyPressed)
    {
         //to get the key code, use Event.Key.Code
         //your code
         //for example
         switch(Event.KeyEvent.Code)
         {
             case(sf::Keyboard::Key::Y):
                 //do stuff
                 break;
         }
    }
}
请注意,我已经有一段时间没有使用SFML了,所以我不能100%确定它是否可以使用switch语句。与
=
相比,在
if-else-if-else
语句中,也将起作用。 也可能有其他方法可以在没有窗口的情况下获得定义的
sf::Event

否则,这是相当简单的。

< p>如果你只是想检测一个按键,KBHITHER()是函数。(Borland家族编译器,Chani.h,但不是我在Google中的C++标准的一部分)。

备选方案:在类Unix操作系统下,您可以使用ncurses来模拟大多数conio行为(看看它是否适合您)

如果您正在寻找一种可以检测按下哪个键的代码(即字母表上方的Numpad 1和1或类似Esc或箭头键的东西)。这段代码在borland编译器上对我有效。当您获取扫描代码(非ascii)时,键盘中的每个键都不同(即使非ascii键也有一个值)

我在我的学校项目中使用了上述代码,所以我不记得找到它的确切来源。但我认为它是Yashwant Kanetkar在GUI部分下让我们使用C的(它后来被删除了,所以您正在寻找2008年之前的出版物)


希望它有帮助。

< p>如果你只是想检测一个按键,KBHITHER()是函数。(Borland的编译器家族,Chani.h,但不是我在Google中的C++标准的一部分)。

备选方案:在类Unix操作系统下,您可以使用ncurses来模拟大多数conio行为(看看它是否适合您)

如果您正在寻找一种可以检测按下哪个键的代码(即字母表上方的Numpad 1和1或类似Esc或箭头键的东西)。这段代码在borland编译器上对我有效。当您获取扫描代码(非ascii)时,键盘中的每个键都不同(即使非ascii键也有一个值)

我在我的学校项目中使用了上述代码,所以我不记得找到它的确切来源。但我认为它是Yashwant Kanetkar在GUI部分下让我们使用C的(它后来被删除了,所以您正在寻找2008年之前的出版物)


希望能有所帮助。

从90年代初开始,在计算机上就没有“简单的方法”可以做任何事情。从90年代初开始,在计算机上就没有“简单的方法”可以做任何事情。这是假设您正在运行SFML作为图形,因此此选项最适合您。谢谢,这很有效,不过类成员似乎被称为“key”而不是“KeyEvent”,而“GetEvent”则称为“pollEvent”“。无论如何,如果SFML使用ASCII常量而不是它自己的属性常量,那就太好了。嘿!我找到了一个更好的解决方案,使用sf::Event::TextEntered和Event.text这是假设您正在运行SFML作为图形,因此此选项最适合您。谢谢,这很有效,但是类成员似乎被称为“key”而不是“KeyEvent”,而“GetEvent”被称为“pollEvent”。无论如何,如果SFML使用ASCII常量而不是它自己的属性常量,那就太好了。嘿!我找到了一个更好的解决方案,使用sf::Event::textinenter和Event.text