为现有的WinForms应用程序添加Windows 8 touch支持

Dav*_* R. 9 .net user-interface touch winforms windows-8

我有一个针对.NET Framework 4的现有Windows窗体桌面应用程序,并希望为其添加Windows 8触摸支持.

目前该程序在Windows 8中运行良好,我可能只是调整一些元素的大小,使其在触摸设备上更加用户友好.但是,添加手势(如数据网格上的双指缩放)以及滑动对其他元素的支持将大大有助于使应用程序在仅触摸环境中更加现代化.

我正在投资Visual Studio 2012,这将让我以.NET 4.5和新的Windows 8功能为目标,但有没有人知道任何可以帮助我更新我的应用程序的资源?我特别关注以下内容:

  • 无法在我的非触摸式开发机器上直接测试应用程序的触摸功能.微软的模拟器似乎只支持Metro应用程序.我听说像Splashtop这样的平板电脑应用程序可以提供帮助(我有一个Android平板电脑),但没有看到任何具体的特定情况
  • WinForms应用程序是否支持手势.我是否必须将整个UI升级到WPF以使其正常工作?(如果我确实采用了这条路线,我相信我也可以定位Windows 7,因为WPF 4支持多点触控)
  • 在运行时检测设备的触摸支持并适当地缩放/更改UI,类似于Microsoft Windows RT Office应用程序上的触摸模式设置.我不想仅仅为了添加新功能而分叉项目
  • 触摸交互的自动测试

这绝不是一个详尽无遗的清单,但我非常感谢那些可能在过去接近过类似升级的人的建议.

Pre*_*gha 6

您可以从组件1 使用TouchToolkit for WinForms.但是我认为你必须重写你的应用程序才能使用这些组件.

在此输入图像描述


She*_* 蒋晟 6

在运行时检测设备的触摸支持是有问题的,因为用户可以随时连接触摸设备.如果在检测到触摸设备连接后调整表单大小并且设备的连接不稳定,则最终可能会出现一个不断调整自身大小的表单.最好为所有输入设置一个稳定的接口(例如,使用功能区而不是小菜单栏).如果您确实想要检测触摸设备,可以使用SM_DIGITIZER调用GetSystemMetrics.

Windows窗体不支持手势(2005年冻结的功能).但是,表单控件仍然可以使用触摸输入,因为默认触摸处理程序转换触摸鼠标单击.如果您想拥有自己的触摸处理程序,因为触摸输入是以Windows消息的形式发送的,您可以覆盖窗体或控件的WndProc函数来处理手势消息.有关示例代码,请检查Windows 7 SDK中的Windows Touch Samples.

要编写触摸功能的测试代码,可以调用InjectTouchInput来模拟触摸输入.可以在输入:触摸注射样品中找到完整的样品.


Fil*_*kun 5

关于"无法在我的非触摸式开发机器上直接测试应用程序的触摸功能的评论.微软的模拟器似乎只支持Metro应用程序" - 我能够运行模拟器,在模拟器中运行桌面并运行模拟触摸输入时的任何应用程序 - 包括WinForms应用程序.

由于WinForms只是WinAPI本机UI API的包装器 - 您可以使用p/Invoke来使用我认为是在Vista/Windows 7时间范围内添加的触摸API.主要是WM_TOUCHWM_GESTURE消息.有很多p/Invoking和使用的例子,protected override void WndProc(ref Message m)这些是你需要处理触摸的主要内容.除此之外 - 触摸输入默认情况下会在未作为触摸处理时自动提升为鼠标事件,因此很多事情都可以正常工作.