我一直在尝试设置一个事件来检查在 Windows 8 商店应用程序中按下的多个键,但还没有成功。
以下是我的一项尝试,但尚未取得成果。
//When key is pressed down
void KeyDown(CoreWindow^ Window, KeyEventArgs^ Args)
{
//if both up and left are pressed
if ((Args->VirtualKey == VirtualKey::Up) && (Args->VirtualKey == VirtualKey::Left)) {
MessageDialog Dialog("Up and left pressed!", "It's working!");
Dialog.ShowAsync();
}
目前,如果我按住两个按钮,它只会记录我按下的第二个按钮。任何帮助将一如既往地不胜感激=)我看到的用于多次按键的方法适用于较旧的操作系统。
最佳答案
已解决:在 cplusplus.com 论坛的帮助下,用户“NTR”
他的解决方案:
“我还没有尝试制作 Windows 8 商店应用程序(因为没有拥有 Windows 8),但这个概念应该与旧版本非常相似。
您是否尝试过使用一个 bool 值数组来存储按键是否被按下,然后测试 keypress 和 keyrelease 对象以关闭和打开这些值?
例如(基于您的代码):
bool keyDownArray[256] = {false}; // keys array
// OR, if the keys aren't stored as numerical values anymore...
bool leftKey = false;
bool upKey = false;
// ...
Window->KeyDown += ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>
(this, &App::KeyDown);
Window->KeyUp += ref new TypedEventHandler<CoreWindow^, KeyEventArgs^>
(this, &App::KeyUp);
void KeyDown(CoreWindow^ Window, KeyEventArgs^ Args) {
// either
keyDownArray[Args->VirtualKey] = true;
// or
if (Args->VirtualKey == VirtualKey::Up)
upKey = true;
if (Args->VirtualKey == VirtualKey::Left)
leftKey = true;
}
void KeyUp(CoreWindow^ Window, KeyEventArgs^ Args) {
// either
keyDownArray[Args->VirtualKey] = false;
// or
if (Args->VirtualKey == VirtualKey::Up)
upKey = false;
if (Args->VirtualKey == VirtualKey::Left)
leftKey = false;
}
// ....
if (keyDownArray[VirtualKey::Up] && keyDownArray[VirtualKey::Left]) {
MessageDialog Dialog("Up and left pressed!", "It's working!");
Dialog.ShowAsync();
}
// OR
if (keyLeft && keyUp) {
MessageDialog Dialog("Up and left pressed!", "It's working!");
Dialog.ShowAsync()
}
正如我所说,我之前没有开发过任何 Windows 8 商店应用程序,因此这可能是完全错误的,但希望它能为您提供一个可以实现的可能解决方案的想法。”
完全归功于他!
关于c++ - 在 Windows 8 商店应用程序中使用 Window->KeyDown 事件设置多个按键。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051231/