Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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
WRL/C++;检测同时按下的多个鼠标按钮 我在C++中针对UWP的Windows WRL进行编码,需要处理鼠标输入,同时由左/右按钮同时按下。_C++_Uwp_Mouse_Wrl - Fatal编程技术网

WRL/C++;检测同时按下的多个鼠标按钮 我在C++中针对UWP的Windows WRL进行编码,需要处理鼠标输入,同时由左/右按钮同时按下。

WRL/C++;检测同时按下的多个鼠标按钮 我在C++中针对UWP的Windows WRL进行编码,需要处理鼠标输入,同时由左/右按钮同时按下。,c++,uwp,mouse,wrl,C++,Uwp,Mouse,Wrl,我的代码只接收第一次按下鼠标按钮和最后一次释放鼠标按钮的事件。所以,如果我先按右键再按左键,左键不会触发PointerPressed。类似地,如果我先释放右按钮,然后再释放左按钮,则不会为右按钮触发PointerReleased。我订阅了以下活动: void App::SetWindow(CoreWindow^ window) { window->PointerPressed += ref new TypedEventHandler<CoreWindow ^, PointerEv

我的代码只接收第一次按下鼠标按钮和最后一次释放鼠标按钮的事件。所以,如果我先按右键再按左键,左键不会触发PointerPressed。类似地,如果我先释放右按钮,然后再释放左按钮,则不会为右按钮触发PointerReleased。我订阅了以下活动:

void App::SetWindow(CoreWindow^ window)
{
  window->PointerPressed += ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>(this, &App::OnPointerPressed);
  window->PointerReleased += ref new TypedEventHandler<CoreWindow ^, PointerEventArgs ^>(this, &App::OnPointerReleased);
}

void App::OnPointerPressed(CoreWindow ^sender, PointerEventArgs ^args)
{
}

void App::OnPointerReleased(CoreWindow ^sender, PointerEventArgs ^args)
{
}
void应用程序::设置窗口(核心窗口^window)
{
window->PointerPressed+=ref新类型deventhandler(这个,&App::OnPointerPressed);
window->PointerReleased+=ref新类型deventhandler(这个,&App::OnPointerReleased);
}
无效应用程序::OnPointerPressed(CoreWindow ^sender,PointerEventArgs ^args)
{
}
void应用程序::OnPointerReleased(CoreWindow ^sender,PointerEventArgs ^args)
{
}
请让我知道我的代码是否需要在按钮按下/释放之间重置某些内容,或者我是否应该订阅一些其他事件

谢谢

在交互会话中检测到的第一次鼠标按钮按下将触发该事件,而在交互会话结束之前,第二次鼠标按钮按下不会触发该事件。类似地,仅当最后一个鼠标按钮被释放时才会触发事件,也就是说,当第一个按钮被释放而第二个按钮未被释放时不会触发事件

因此,您不能使用
CoreWindow.PointerPressed
CoreWindow.PointerReleased
事件来检测同时按下的左右按钮

您可以使用事件来检测同时进行的两个鼠标操作

比如说,

Void App::SetWindow(CoreWindow^ window)
{
    window->PointerMoved+=ref new TypedEventHandler<CoreWindow^, PointerEventArgs^>(this, &App::OnPointerMoved);
}

Void App::OnPointerMoved(CoreWindow^ sender, PointerEventArgs^ args)
{
    if (args->CurrentPoint->Properties->IsLeftButtonPressed)
    {
        pressed++;  // pressed is an int variable whose initial value is 0,  pressed is defind in App.xaml.h
    }
    if (args->CurrentPoint->Properties->IsRightButtonPressed)
    {
        released++;  // released is an int variable whose initial value is 0,  released is defind in App.xaml.h
    }
    if (pressed&&released)
    {
        pressed = 0;
        released = 0;
       //Here we know the right and left button of mouse is pressed
    }
}
Void应用程序::设置窗口(核心窗口^window)
{
window->PointerMoved+=ref new-TypedEventHandler(这个,&App::OnPointerMoved);
}
无效应用程序::OnPointerMoved(核心窗口^sender,PointerEventArgs ^args)
{
如果(参数->当前点->属性->IsLeftButtonPressed)
{
pressed++;//pressed是一个初始值为0的int变量,pressed在App.xaml.h中定义
}
如果(参数->当前点->属性->IsRightButton按下)
{
released++;//released是一个初始值为0的int变量,release在App.xaml.h中定义
}
如果(按下并释放)
{
按下=0;
释放=0;
//这里我们知道鼠标的左右键被按下了
}
}

的确,OnPointerMoved是正在触发的事件,尽管有点尴尬。谢谢你的解释。