CMenu 未收到 Windows 触摸消息

CMenu not receiving Windows touch messages

在我的应用程序中,当我在某个 window 中收到 ON_WM_RBUTTONDOWN() 消息时,我创建了一个 CMenu,填充了一些项目,然后显示 TrackPopupMenu(xxx)。它与要创建的 Windows 消息没有其他交互。它默认接受左键单击 select 个项目,当我使用鼠标时我可以看到这些消息。

我正在尝试允许在触摸屏上使用此上下文菜单 - 父级 window 可以接收 WM_GESTURENOTIFY 消息(用于其他功能)以及我应用程序的所有其他方面,例如其他 windows 和对话框,它可以很好地处理触摸手势 - Spy++ 显示手势消息和一个 WM_LBUTTONDOWN ,它让我在整个应用程序中表现正常。我 可以 触摸 select 菜单项,当通过物理鼠标右键单击打开此菜单时,触摸输入作为 WM_LBUTTONDOWN.

我已经尝试通过从触摸消息再次调用相同的创建代码来创建和显示此菜单,或者只是在触摸后手动发送 window 一条 ON_WM_RBUTTONDOWN() 消息,使用相同的旗帜。这创建得很好并且可以正常使用鼠标工作,就应用程序而言没有什么不同。但是,CMenu 根本没有收到任何触摸消息 - 我得到触摸式光标显示我正在点击的位置,但没有任何内容通过管道传输到菜单。

我尝试在这种交互发生时从手势更改为注册触摸,并确保关闭原始手势句柄以防它因任何原因被阻塞。

我的假设是 Windows 正在幕后做一些超出我的应用程序所知道的事情来允许发送这些消息,所以我有点难以找到解决方案。

我能够通过启用平板电脑 press-and-hold 手势(它通常被禁用)来解决这个问题,该手势的目的是被视为右键单击并具有可正确交互的上下文菜单,而不是发送自己右键留言。在带有触摸屏和 Windows 平板电脑的台式机上工作。

https://docs.microsoft.com/en-us/troubleshoot/developer/visualstudio/cpp/language-compilers/mfc-enable-tablet-press-and-hold-gesture

正在添加 ULONG CMyView::GetGestureStatus(CPoint /*ptTouch*/) { return 0; } 是它起作用的原因。