C# & WinForm开发触控应用程式

作者: 51Touch     时间:2009-12-04     源于:runpc    总点击:
【导读】:多点触控(Multi Touch)是微软新一代作业系统Windows 7较受关注的特点之一,本文将使用Visual C# 2008建立一个Windows Form应用程式,并说明如何取得触控动作相关资讯。

    北京时间12月04日消息,中国触摸屏网讯, 多点触控(Multi Touch)是微软新一代作业系统Windows 7较受关注的特点之一,本文将使用Visual C# 2008建立一个Windows Form应用程式,并说明如何取得触控动作相关资讯。

    本文来自:http://www.51touch.com/touchscreen/news/front/200912/04-4057.html

    在Windows 7的Home Premium、Professional、Enterprise和Ultimate版本中,只要搭配支援多点触控的硬体即可使用多点触控功能。而应用程式方面,对触控的支援则可分为三个等级:Good、Better和Best(请参考表1)。

    Good等级表示不需要修改程式码可直接支援数个基本的手势;Better等级要能针对各种不同的手势做出合理自然的互动;Best等级则是使用更进阶的功能处理更详细的资讯,自订各种触控操作经验。

    Windows 7支援的手势有9种(参考表2),我们可以看到除了Rotate和Two-Finger Tap之外,其馀手势都可以对应到传统的滑鼠或键盘的操作,也就是说应用程式不需大幅修改既有的程式,即可支援Windows 7大部分的手势,然而你也可以在程式中重新定义这些手势所对应的动作。 

    如何取得设备资讯?

    在开始处理触控动作前,你可以呼叫GetSystemMetrics并传入SM_DIGITIZER来得知目前电脑的触控支援能力(参考程式1),根据GetSystemMetrics的传回值,即可得知相关资讯(参考表3)。若你没有适当的触控硬体,可以使用Multi-Touch Vista这个软体搭配2隻滑鼠模拟2点输入。

    如何取得触控讯息?
 
    为了支援触控动作,Windows 7定义了2个新的视窗讯息:WM_GESTURE与WM_TOUCH。Windows 7中的视窗预设只会收到WM_GESTURE讯息,若呼叫了RegisterTouchWindow之后则会变成只会收到WM_TOUCH讯息,然而本文将专注于探讨WM_GESTURE讯息。

    由于目前的WinForm尚未将这2个讯息转换为控制项的事件,所以为了处理这2个讯息,最直接的方式就是覆写控制项的WndProc方法。在本文的范例中,我们覆写Form的WndProc方法,如此便能处理表单上的触控动作(参考程式2)。

    若你要让其他控制项支援触控动作,则必须另外继承该控制项,并覆写其WndProc方法,或是在表单的WndProc方法中实作判断触控目的控制项的逻辑。

    在收到一个手势的第一个WM_GESTURE讯息前,程式会先收到一个WM_GESTURENOTIFY讯息,你可以在此时呼叫SetGestureConfig并带入GESTURECONFIG结构,设定目前要接受或忽略哪些手势。

    也可以在视窗一载入时就先设定好(参考程式3)。视窗预设不会收到关于Rotate手势的讯息,若想收到所有手势的讯息则必须呼叫 SetGestureConfig 做设定,详细的设定项目请参考:http://msdn.microsoft.com/library/dd353241.aspx。

    如何解读触控资讯?

    在手势作用的过程中成是会收到多个WM_GESTURE讯息,其所带的参数可用来取得GESTUREINFO结构(参考程式4),其中比较重要的部分是dwFlags、dwID、ptsLocation以及ullArguments。dwID可用来分辨是哪种手势(参考表4),dwFlags表示手势的状态(开始、惯性动作、停止),ptsLocation及ullArguments则根据不同的手势有不同的意义,详细资讯请参考:http://msdn.microsoft.com/library/dd353242.aspx。

    在此我们只看到5种Gesture ID,但前文却提到了9种手势,这是因为Flicks (笔触,根据滑动方向提供一组功能)是对应到Pan手势或键盘动作,而其他3种手势只会引发单纯的滑鼠事件。在滑鼠事件处理常式中,利用GetMessageExtraInfo可得知事件是由滑鼠还是触控所产生,进而做不同的处理(参考程式5)。

    本文中的范例会于收到WM_GESTURE讯息时,在DecodeGesture方法中利用GetGestureInfo来取得与手势相关的GESTUREINFO结构,并根据不同的手势做对应的动作(参考程式6)。需注意的是,处理完之后必须呼叫CloseGestureInfoHandle关闭GESTUREINFO的handle,否则会造成记忆体遗漏。

 

 

    处理Pan手势的小技巧

    在处理Pan手势时,为了避免Windows将手势误判为Flicks,造成不良的使用经验,最好暂时关闭Flicks的功能。此动作可以在控制项载入时就呼叫SetProp进行设定(参考程式7),或是在WndProc中收到WM_TABLET_QUERYSYSTEMGESTURESTATUS讯息时设定m.Result为TABLET_DISABLE_FLICKS(参考程式8)。其他可设定的项目请参考http://msdn.microsoft.com/en-us/library/bb969148.aspx。

    结语

    了解以上处理WM_GESTURE讯息的方式之后,即可试著阅读并修改Windows 7 SDK中的MTGestures范例程式。该范例会在表单上绘製一个长方形,并依据不同的手势对表单上的长方形做出不同的动作。


    触摸屏与OLED网推出微信公共平台,每日一条微信新闻,涵盖触摸屏材料、触摸屏设备、触控面板行业主要资讯,第一时间了解触摸屏行业发展动态。关注办法:微信公众号“i51touch” 或微信中扫描下面二维码关注,或这里查看详细步骤
相关阅读:3D打印    模具产业    微铸锻技术    石墨烯    OLED面板    夏普    iPhone 8    半导体    苹果    
关于我们 | 广告服务 | 联系我们 | 版权声明 | 隐私政策 | 网站地图 | 友情链接 | 欢迎投稿 | 加入收藏 | 意见反馈 | 经销商加入
网站广告、经销商加盟、触摸屏软件销售: 028-85108892 13183843395 028-66219290 联系人: 张小姐 产品购买联系方式如下:
地址:成都市高升桥东路2号高盛中心1109室 电话: 028-85108892 13183843395 028-66219290
版权所有 Copyright(C) 2003-2015 All rights reserved 中国触摸屏网 电子邮件: 51touch@126.com touch8@gmail.com
业务合作QQ:触摸屏技术,触摸屏报价,触摸屏软件咨询 43361182 触摸屏软件制作与技术支持:触摸屏软件,触摸查询系统,触摸查询软件 893008608 媒体合作QQ: 893008608

2000人超级QQ触摸屏群:59897879 171220106


分享到