调用 SetGestureConfig 方法会影响控件的 onmousemove 覆盖
Calling SetGestureConfig method affects onmousemove override of control
为了处理捏合等触摸手势,我在 WndProc
控件中调用覆盖方法中的 SetGestureConfig
方法。
我只想将此方法用于捏合手势而不是 GC_ALLGESTURES。
这是代码
switch (m.Msg)
{
case WM_GESTURENOTIFY:
{
GESTURECONFIG gc = new GESTURECONFIG();
gc.dwID = 0;
gc.dwWant = GC_ALLGESTURES;
gc.dwBlock = 0;
bool result = SetGestureConfig(
handle,
0,
1,
ref gc,
_gestureConfigSize
);
if (!result)
{
throw new Exception("Error in execution of SetGestureConfig");
}
}
break;
//... other codes if any
}
在使用这段代码之前,当我在控件上触摸和移动手指时,OnMouseMove
将调用控件的重写方法。但是用了这段代码之后就不是这样了
我正在分别处理与手势相关的功能,如捏合、平移等,并且工作正常。
平移应仅在捏合手势后发生。如果在控件上执行捏合手势,则应在触摸移动时执行平移。如果不在控件上执行捏合手势,那么我希望在触摸移动期间触发默认的鼠标移动事件
但是调用SetGestureConfig
方法,不会触发默认的鼠标移动事件。
我应该在没有捏合的平移手势期间手动调用 OnMouseMove
吗?或者是否应该对 SetGestureConfig
方法的调用进行任何修改,以避免在平移手势期间阻塞 OnMouseMove
。
看来我们可以控制我们想听的手势。 https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setgestureconfig
的参考备注部分
在上面的代码中,我只需要进行以下更改以仅监听捏合手势和平移(仅在执行捏合后)。通过评论解释更改
switch (m.Msg)
{
case WM_GESTURENOTIFY:
{
GESTURECONFIG gc = new GESTURECONFIG();
//Listen to required gestures here
//If 0, all gestures like pinching, panning, etc will be listened
//If GID_ZOOM, only pinching gesture will be listened
gc.dwID = IsPinchingPerformed ? 0 : GID_ZOOM;
gc.dwWant = GC_ALLGESTURES;
gc.dwBlock = 0;
bool result = SetGestureConfig(
handle,
0,
1,
ref gc,
_gestureConfigSize
);
}
break;
//... other codes if any
}
为了处理捏合等触摸手势,我在 WndProc
控件中调用覆盖方法中的 SetGestureConfig
方法。
我只想将此方法用于捏合手势而不是 GC_ALLGESTURES。
这是代码
switch (m.Msg)
{
case WM_GESTURENOTIFY:
{
GESTURECONFIG gc = new GESTURECONFIG();
gc.dwID = 0;
gc.dwWant = GC_ALLGESTURES;
gc.dwBlock = 0;
bool result = SetGestureConfig(
handle,
0,
1,
ref gc,
_gestureConfigSize
);
if (!result)
{
throw new Exception("Error in execution of SetGestureConfig");
}
}
break;
//... other codes if any
}
在使用这段代码之前,当我在控件上触摸和移动手指时,OnMouseMove
将调用控件的重写方法。但是用了这段代码之后就不是这样了
我正在分别处理与手势相关的功能,如捏合、平移等,并且工作正常。
平移应仅在捏合手势后发生。如果在控件上执行捏合手势,则应在触摸移动时执行平移。如果不在控件上执行捏合手势,那么我希望在触摸移动期间触发默认的鼠标移动事件
但是调用SetGestureConfig
方法,不会触发默认的鼠标移动事件。
我应该在没有捏合的平移手势期间手动调用 OnMouseMove
吗?或者是否应该对 SetGestureConfig
方法的调用进行任何修改,以避免在平移手势期间阻塞 OnMouseMove
。
看来我们可以控制我们想听的手势。 https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setgestureconfig
的参考备注部分在上面的代码中,我只需要进行以下更改以仅监听捏合手势和平移(仅在执行捏合后)。通过评论解释更改
switch (m.Msg)
{
case WM_GESTURENOTIFY:
{
GESTURECONFIG gc = new GESTURECONFIG();
//Listen to required gestures here
//If 0, all gestures like pinching, panning, etc will be listened
//If GID_ZOOM, only pinching gesture will be listened
gc.dwID = IsPinchingPerformed ? 0 : GID_ZOOM;
gc.dwWant = GC_ALLGESTURES;
gc.dwBlock = 0;
bool result = SetGestureConfig(
handle,
0,
1,
ref gc,
_gestureConfigSize
);
}
break;
//... other codes if any
}