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功能为目标,但有没有人知道任何可以帮助我更新我的应用程序的资源?我特别关注以下内容:
这绝不是一个详尽无遗的清单,但我非常感谢那些可能在过去接近过类似升级的人的建议.
在运行时检测设备的触摸支持是有问题的,因为用户可以随时连接触摸设备.如果在检测到触摸设备连接后调整表单大小并且设备的连接不稳定,则最终可能会出现一个不断调整自身大小的表单.最好为所有输入设置一个稳定的接口(例如,使用功能区而不是小菜单栏).如果您确实想要检测触摸设备,可以使用SM_DIGITIZER调用GetSystemMetrics.
Windows窗体不支持手势(2005年冻结的功能).但是,表单控件仍然可以使用触摸输入,因为默认触摸处理程序转换触摸鼠标单击.如果您想拥有自己的触摸处理程序,因为触摸输入是以Windows消息的形式发送的,您可以覆盖窗体或控件的WndProc函数来处理手势消息.有关示例代码,请检查Windows 7 SDK中的Windows Touch Samples.
要编写触摸功能的测试代码,可以调用InjectTouchInput来模拟触摸输入.可以在输入:触摸注射样品中找到完整的样品.
关于"无法在我的非触摸式开发机器上直接测试应用程序的触摸功能的评论.微软的模拟器似乎只支持Metro应用程序" - 我能够运行模拟器,在模拟器中运行桌面并运行模拟触摸输入时的任何应用程序 - 包括WinForms应用程序.
由于WinForms只是WinAPI本机UI API的包装器 - 您可以使用p/Invoke来使用我认为是在Vista/Windows 7时间范围内添加的触摸API.主要是WM_TOUCH和WM_GESTURE消息.有很多p/Invoking和使用的例子,protected override void WndProc(ref Message m)这些是你需要处理触摸的主要内容.除此之外 - 触摸输入默认情况下会在未作为触摸处理时自动提升为鼠标事件,因此很多事情都可以正常工作.