基于Visual C++ 2010开发Windows7应用 开发多点触控MFC应用程序

本文介绍了如何在Windows 7环境下,利用Visual C++ 2010开发支持多点触控的MFC应用程序。通过检查硬件触控支持,注册触控窗口,处理触控输入消息,以及实现手指绘图功能,详细展示了多点触控功能的实现步骤。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

       当下计算机变得越来越智能化,越来越无所不能,触摸屏的普及只是时间问题了。 虽然鼠标和键盘不会很快就离开人们的视野,毕竟人们使用鼠标跟键盘已经成为一种习惯,但是处理信息或者说操作计算机的其他方法也层出不穷——比如触控技术。从硬件技术的角度来讲,触控技术是可行的,随着最新一代的触摸屏技术,接触技术现在已经存在,如今Web开发人员可以利用Silverlight 3提供多点触摸功能。可惜的是,只有Windows 7同时支持Silverlight和多点触摸能力。这个因素大大制约了这部分功能的运用和推广,不过如果多点触摸继续流行开来的话,情况会有所改变的,不过现在Windows 7为触摸屏技术提供了发挥的软件空间,Windows 7让屏幕触控技术成为可能。

  借助 Windows 7 和触摸感应屏幕,您只需使用手指即可在电脑上翻阅在线报纸,翻阅相册,拖拽文件和文件夹。 多年来在 Windows 中早已开始采用触控技术。Windows 7 进一步将其扩展到电脑的每个角落。“开始”菜单和任务栏现在都采用了加大显示、易于手指触摸的图标。常用的 Windows 7 程序也都可以执行触摸操作。您甚至可以在“画图”中使用手指来画图!

  Windows 触控功能还可以识别多点触控(使用适当的监视器)。是否需要缩小图片将手指捏在一起即可。是否要用鼠标右键单击某项内容?用一个手指触及该内容,并用第二个手指点击屏幕即可。Windows 触控功能仅在 Windows 7 的家庭高级版、专业版和旗舰版中提供。

  什么是触控操作呢?触控指 Windows 允许你使用手指直接与计算机进行交互的方式。与使用鼠标、键盘或手写笔相比,触摸更加方便、自然、具有吸引力。也更符合人们日常的交流习惯。而Windows 7中引入了全新的多点触摸的概念。多点触摸又称多点触控,简而言之可以理解为一个屏幕多点操作。多点触摸不但是两个点或者几个点同时应用到屏幕上这么一点点便利,由于是多点触摸,所以他能感应到手指滑动的快慢以及力度(力度用触摸点的多少转换来实现),从而操作系统应用起来更加人性化。传统的触控屏幕一次只能判断一个触控点,若同时有两个以上的点被触碰,就不能做出正确反应,或者说反应混乱了。多重触控的任务可以分解为两个方面的工作,一是同时采集多点信号,二是对每路信号的意义进行判断,也就是所谓的手势识别。最早在Apple公司的iPhone上应用。多点触摸技术是一项划时代的输入方式。可以设想随着全息投影的发展,完全有可能实现屏幕在空中投影,而用户直接在投影中触控电脑,科幻电影中的场景将会变成现实。

      下面我们来看一段关于用手玩转win7触摸屏多点触摸屏电脑,现在您是不是被这种绚丽界面所吸引,被这种便捷而有趣的操作所震撼?

      我们自己打造的程序里面如何使用多点触摸技术呢,就是让我们的程序也具有此种多点触摸功能,用手就可以玩转我们的应用程序呢?

      好了,不多说了,下面我用实例来讲解这些功能实现:

首先:我们基于MFC新建一个简单窗体工程,如下图所示:

 单击"finish"完成工程创建

               

接下来我们向应用程序添加触控支持,表现以下两点:

1.我们正在构建的应用程序需要支持触控的硬件,因此我们需要在应用程序中查看这一点。

2.在 Scratchpad.cpp 中,在 CScratchPadApp::InitInstance(): 后添加以下检查代码:

  1. BYTE digitizerStatus = (BYTE) GetSystemMetrics(SM_DIGITIZER);  
  2.   
  3. if ((digitizerStatus & (0x80 + 0x40)) == 0)   
  4. //堆栈就绪+多触点  
  5.   
  6. {  
  7.   
  8. AfxMessageBox(L"No touch input is currently available.");  
  9.   
  10. return false;  
  11.   
  12. }  
  13.   
  14.    
  15.   
  16. BYTE nInputs = (BYTE) GetSystemMetrics(SM_MAXIMUMTOUCHES);  
  17.   
  18.    
  19.   
  20. CString str;  
  21.   
  22. str.Format(L"Touch input available with %d touch points.", nInputs);  
  23.   
  24. AfxMessageBox(str);  
  25.   
  26.    
  27.   
  28. return true;  
BYTE digitizerStatus = (BYTE) GetSystemMetrics(SM_DIGITIZER);if ((digitizerStatus & (0x80 + 0x40)) == 0) //堆栈就绪+多触点{AfxMessageBox(L"No touch input is currently available.");return false;} BYTE nInputs = (BYTE) GetSystemMetrics(SM_MAXIMUMTOUCHES); CString str;str.Format(L"Touch input available with %d touch points.", nInputs);AfxMessageBox(str); return true;

3. 您可以看到,除了查看触控可用性和就绪情况以外,我们还可以发现硬件支持的触控输入数量。

4. 编译并运行。

5. 根据机器上触控输入的数量,您应该看到类似下图的输出:

 

6.为了注册应用程序客户端视图窗口来接收触控消息,我们需要调用 MFC 函数 CWnd::RegisterTouchWindow()。我们将在视图创建之后执行该操作,即在 OnCreate() 事件处理程序中完成。

切换到 Class View 并选择 CChildView 类。

在 Properties 页面中,转到 Message 属性表并导航到 WM_CREATE,然后从下拉框中添加 OnCreate() 消息处理程序:

 

 

7.  在 CChildView::OnCreate() 处理程序中添加以下代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值