XAML触摸事件无法正常工作

时间:2015-01-23 12:16:05

标签: c++ xaml windows-runtime touch windows-8.1

我正在用c ++(DirectX和XAML App)开发windows8.1游戏。我发现在游戏中处理触摸时遇到的问题很少。我正在使用这些事件处理程序来检测用户触摸/点击。

// The CoreIndependentInputSource will raise pointer events for the specified device types on whichever thread it's created on.
    m_coreInput = swapChainPanel->CreateCoreIndependentInputSource(
        Windows::UI::Core::CoreInputDeviceTypes::Mouse |
        Windows::UI::Core::CoreInputDeviceTypes::Touch |
        Windows::UI::Core::CoreInputDeviceTypes::Pen
        );

    // Register for pointer events, which will be raised on the background thread.
    m_coreInput->PointerPressed += ref new TypedEventHandler<Object^, PointerEventArgs^>(this, &OpenGLESPage::OnPointerPressed);
    m_coreInput->PointerMoved += ref new TypedEventHandler<Object^, PointerEventArgs^>(this, &OpenGLESPage::OnPointerMoved);
    m_coreInput->PointerReleased += ref new TypedEventHandler<Object^, PointerEventArgs^>(this, &OpenGLESPage::OnPointerReleased);

....

void OpenGLESPage::OnPointerReleased(Platform::Object^ sender, PointerEventArgs^ e)
{
    e->Handled = true;
    Windows::UI::Input::PointerPoint ^ point = e->CurrentPoint;
    ....
}

如果按下鼠标按钮 - 一切正常,所有事件都将被触发 - 按下,移动,释放。但是,如果我执行此组合 - 事件将无法正常触发。

  1. 按鼠标左键 - &gt;调试:左键按下
  2. 按鼠标右键 - &gt; ???调试:移动
  3. 释放鼠标左键 - &gt; ???调试:移动
  4. 释放鼠标右键 - &gt;调试:正确发布
  5. 我错过了什么?如何正确处理所有处理程序?

1 个答案:

答案 0 :(得分:0)

(从https://social.msdn.microsoft.com/Forums/windowsapps/en-US/6ce9be89-8b14-46fa-b3d5-622bef0adb81/xaml-touch-events-dont-work-properly?forum=winappswithnativecode重复)

这听起来像是正确的行为。鼠标是单个指针,而不是单独按钮的单独指针。只要按下任何按钮,指针就会被按下,您可以检查状态以查看哪些按钮已关闭。

如果您可以解释您实际上想要做的事情,我们可以提供更多直接帮助。我怀疑你最好在更新循环中查看指针状态而不是等待指针事件,但它取决于最终目标。