gtkmm 多点触控设备无法识别 (Windows)

Posted

技术标签:

【中文标题】gtkmm 多点触控设备无法识别 (Windows)【英文标题】:gtkmm multi-touch device not recognized (Windows) 【发布时间】:2021-02-23 18:34:31 【问题描述】:

版本:Gtkmm v3.22(通过vcpkg安装)

我已插入使用标准 Windows 驱动程序“符合 HID 的触摸屏”的多点触控设备。

我已在此处验证原生 Windows WM_TOUCH 能够使用此触摸屏进行多点触控数字化:https://docs.microsoft.com/en-us/windows/win32/wintouch/getting-started-with-multi-touch-messages

我创建了一个基本的 gtkmm 应用程序,并在运行该应用程序之前在 parent_window() 上调用了 set_support_multidevice()

但是,当我将 Gtk::Button 的 signal_touch_event() 连接到一个方法时,从未收到任何触摸事件 - 只有基于指针的事件也可以通过鼠标发送。

然后为了验证连接了哪些设备,我编写了以下代码:

    // Get the device manager from the Gdk::Display object
    Glib::RefPtr<Gdk::DeviceManager> dev_manager = parent_display->get_device_manager();

    // Get device list from the device manager for type "floating"
    std::vector<Glib::RefPtr<Gdk::Device>> devices = 
      dev_manager->list_devices(Gdk::DEVICE_TYPE_FLOATING);

    for (int i = 0; i < devices.size(); i++) 
        std::cout << "Device found: " << devices[i]->property_name() << std::endl;
    

    // Get devices for type "master"
    devices = dev_manager->list_devices(Gdk::DEVICE_TYPE_MASTER);
    for (int i = 0; i < devices.size(); i++) 
        std::cout << "Device found: " << devices[i]->property_name() << std::endl;
    

    // Get devices for type "slave"
    devices = dev_manager->list_devices(Gdk::DEVICE_TYPE_SLAVE);
    for (int i = 0; i < devices.size(); i++) 
        std::cout << "Device found: " << devices[i]->property_name() << std::endl;
    

    // At this point we should have printed all devices associated with the Gdk::DeviceManager that's 
    // attached to the current display

它打印出设备管理器为父显示器找到的所有设备。我得到的是以下内容:

Device found: Virtual Core Keyboard
Device found: Virtual Core Pointer
Device found: System Aggregated Keyboard
Device found: System Aggregated Pointer

我必须做什么才能让设备管理器识别能够进行多点触控的从设备?

我的多点触控设备被视为系统聚合指针,我无法处理典型的触控事件 - 只能处理“类似鼠标”的事件。

【问题讨论】:

【参考方案1】:

如果您可以隔离设备,则可以使用gdk_device_set_mode() 并将设备设置为主设备,这将允许它处理所有类型的事件。您可能还想使用 gdk_device_get_mode() 来确认 gdk 是否以不同的方式对待设备。

【讨论】:

我的问题是,我可以通过设备管理器找到的唯一设备是系统聚合键盘和系统聚合指针。我什至找不到多点触控设备。 抱歉奥斯汀,我对有问题的设备了解不多,能否提供设备的名称和规格,以便我进一步研究。

以上是关于gtkmm 多点触控设备无法识别 (Windows)的主要内容,如果未能解决你的问题,请参考以下文章

USB HID多点触控串行报告

微信小程序~触摸相关事件(拖拽操作手势识别多点触控)

仿真器上的多点触控(Windows Phone 8.0)

我应该使用IOKit还是DriverKIt(或HIDDriverKit)为macOS中的USB或蓝牙多点触控设备编写驱动程序?

多点触控与多鼠标支持

WPF学习第十八章 多点触控输入