自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不用鼠標(biāo) 雙指觸控Windows 7的API揭秘

系統(tǒng)
Windows 7有一些酷炫的功能是XP、Vista系統(tǒng)沒(méi)有的,例如窗口分組預(yù)覽、快速隱藏桌面圖標(biāo)、搖走其他窗口……這些酷炫的功能是怎么設(shè)計(jì)的?我們開(kāi)發(fā)的個(gè)人軟件如何使用這些功能,給用戶帶來(lái)驚喜?
Windows 7有一些酷炫的功能是XP、Vista系統(tǒng)沒(méi)有的,例如窗口分組預(yù)覽、快速隱藏桌面圖標(biāo)、搖走其他窗口……這些酷炫的功能是怎么設(shè)計(jì)的?我們開(kāi)發(fā)的個(gè)人軟件如何使用這些功能,給用戶帶來(lái)驚喜?

  在《少數(shù)派報(bào)告》中阿湯哥直接用雙指在觸摸屏上操作程序,酷斃了。這種功能Win 7也支持,只要有觸摸設(shè)備,我們也可以在Win 7上用雙手玩轉(zhuǎn)電腦。雙指觸控如縮放、雙指放大、雙指翻頁(yè)等特效都可以在Win 7中實(shí)現(xiàn)。

  常用的兩種手勢(shì)

  1.縮放手勢(shì)

  縮放手勢(shì)用于界面放大或縮小,在瀏覽圖片、文章閱讀等程序中常常會(huì)用到。雙指縮放的手勢(shì)如圖1所示:雙指并攏置于窗體中,一指向上滑動(dòng),一指向下滑動(dòng),這是放大,雙指分開(kāi)置于窗體上,兩指向中間滑動(dòng),則是縮小。

不用鼠標(biāo) 用雙指掌控Windows 7


  程序要識(shí)別出這個(gè)手勢(shì),***步,要得到手指點(diǎn)到屏幕的消息。第二步,根據(jù)兩指的坐標(biāo)計(jì)算出距離,根據(jù)一個(gè)經(jīng)驗(yàn)值對(duì)兩指距離進(jìn)行比較,來(lái)得到這是兩指分開(kāi)或兩指并攏。第三步,可以根據(jù)一個(gè)定時(shí)器來(lái)實(shí)時(shí)捕捉手指點(diǎn)的坐標(biāo),來(lái)計(jì)算出移動(dòng)方向及速率,進(jìn)一步就可判斷出兩指是反向滑動(dòng)還是相向滑動(dòng)。

  2.平移手勢(shì)

  平移手勢(shì)往往用于導(dǎo)航。例如在一個(gè)圖片查看程序中,使用向左平移手勢(shì)可以導(dǎo)航到上一張,使用向右平移手勢(shì)導(dǎo)航到下一張圖片。平移手勢(shì)如圖2所示:雙指同時(shí)向左滑動(dòng),或向右滑動(dòng)。如何區(qū)分用戶是要改變圖片的位置還是翻頁(yè)呢?這里必須使用到加速度。

不用鼠標(biāo) 用雙指掌控Windows 7


  可以在一個(gè)定時(shí)器中實(shí)時(shí)捕捉手指坐標(biāo),計(jì)算出速率和加速度,可以通過(guò)一個(gè)經(jīng)驗(yàn)值去和加速度比較,當(dāng)加速度比較大的時(shí)候,可以認(rèn)為是翻頁(yè),反之則是拖動(dòng)。當(dāng)然,這還不夠,當(dāng)拖動(dòng)時(shí),還需要進(jìn)一步判斷是否到達(dá)程序邊界,如果到達(dá)邊界,也認(rèn)為是翻頁(yè)。對(duì)于翻頁(yè)的處理,向左快速移動(dòng)或到達(dá)左邊界,則認(rèn)為是上一頁(yè)。

  雙指觸控API揭秘

  雙指觸控的核心是把原始觸摸數(shù)據(jù)放入運(yùn)動(dòng)模型中去計(jì)算,以識(shí)別出用戶的手勢(shì)。原始觸摸數(shù)據(jù)可以從WM_TOUCH消息中得到。通過(guò)WM_TOUCH識(shí)別出縮放和平移手勢(shì)。

  ***步:檢查多點(diǎn)觸控硬件

  這里使用GetSystemMetrics  API來(lái)獲取硬件是不是就緒:

  BYTE digitizerStatus = (BYTE)GetSystemMetrics(SM_DIGITIZER);
  if ((digitizerStatus & (0x80 + 0x40)) == 0){
  //沒(méi)檢測(cè)到多點(diǎn)觸控設(shè)備或設(shè)備沒(méi)有就緒
  }
  //檢查設(shè)備支持幾個(gè)觸摸點(diǎn),需要注意的是目前Win 7對(duì)2個(gè)觸摸點(diǎn)支持得比較好
  BYTE nInputs = (BYTE)GetSystemMetrics(SM_MAXIMUMTOUCHES);

  第二步:切換到原始觸摸消息

  在默認(rèn)情況下,Win 7默認(rèn)提供 WM_GESTURE(手勢(shì))消息。這個(gè)手勢(shì)是系統(tǒng)根據(jù)原始觸摸數(shù)據(jù)來(lái)識(shí)別的手勢(shì),使用 RegisterTouchWindow API函數(shù)可讓系統(tǒng)返回WM_TOUCH原始觸摸輸入消息,核心代碼:

  RegisterTouchWindow(hWnd, 0)) //hwnd為當(dāng)前窗口的句柄。

  第三步:得到原始觸摸數(shù)據(jù)

  使用GetTouchInputInfo API得到原始觸摸數(shù)據(jù),核心代碼:

  GetTouchInputInfo((HTOUCHINPUT)lParam,numInputs,ti,sizeof(TOUCHINPUT)))
  numInputs為預(yù)先聲明的變量,用于存儲(chǔ)有幾個(gè)觸摸點(diǎn),如果是5個(gè)手指同時(shí)在屏幕滑動(dòng),那么numInputs就為5。
  ti是TOUCHINPUT結(jié)構(gòu),其包含了觸點(diǎn)的X和Y坐標(biāo)、發(fā)生時(shí)間、觸摸類型(類似于鼠標(biāo)按下、鼠標(biāo)移動(dòng)、鼠標(biāo)釋放等)。

  for(unsigned int i=0; i<numInputs; ++i){ //根據(jù)觸摸輸入點(diǎn)循環(huán)
  if (ti[i].dwFlags & TOUCHEVENTF_DOWN){
  OnTouchDownHandler(hWnd, ti[i]);//交給觸點(diǎn)按下函數(shù)處理
  }else if (ti[i].dwFlags & TOUCHEVENTF_MOVE){
  OnTouchMoveHandler(hWnd, ti[i]);//交給觸點(diǎn)移動(dòng)函數(shù)處理
  }else if (ti[i].dwFlags & TOUCHEVENTF_UP){
  OnTouchUpHandler(hWnd, ti[i]);} //交給觸點(diǎn)釋放函數(shù)處理
  }

  這里的觸點(diǎn)按下、移動(dòng)、釋放等函數(shù),實(shí)際上是一個(gè)運(yùn)動(dòng)仿真模型,我們?cè)谀P椭?,要將觸點(diǎn)的軌跡生成若干條運(yùn)動(dòng)曲線,并計(jì)算出每個(gè)點(diǎn)的方位角、速率、法向加速度、切向加速度等,以識(shí)別出具體的手勢(shì)。

  小知識(shí):讓程序支持多點(diǎn)觸控最簡(jiǎn)單的方法是用Win 7的手勢(shì)識(shí)別功能,主要用到以下API:
  GetSystemMetrics,用于檢查多點(diǎn)觸控硬件設(shè)備是否存在并就緒。
  GetGestureInfo,用于獲取手勢(shì)類型及相關(guān)數(shù)據(jù)。

【編輯推薦】

  1. 使用Windows 7構(gòu)建更好的測(cè)量系統(tǒng)
  2. 精簡(jiǎn)版Windows7修改版Windows7被指很不安全
  3. ***重要升級(jí)Windows 7 SP1測(cè)試版發(fā)布
責(zé)任編輯:龐桂玉 來(lái)源: 網(wǎng)易科技
相關(guān)推薦

2010-01-09 15:14:29

Windows 7多點(diǎn)觸摸

2009-05-28 09:35:52

2009-09-17 08:38:29

Windows 7觸摸屏多點(diǎn)觸摸

2009-10-12 19:39:43

Windows 7多點(diǎn)觸摸

2009-11-11 09:02:57

Windows 7多點(diǎn)觸摸

2009-03-15 10:24:18

Windows 7新功能

2009-04-15 08:41:36

2009-06-04 09:03:28

微軟Windows 7操作系統(tǒng)

2009-11-04 08:56:03

Windows 7觸摸屏

2009-06-04 09:12:08

2009-03-14 19:01:08

Windows 7新特性多點(diǎn)觸摸

2013-09-23 09:36:13

Windows 8Firefox

2012-06-06 14:26:46

視頻Windows 8

2012-08-17 16:35:15

Windows 8操作系統(tǒng)

2011-02-15 14:24:57

Windows 8多點(diǎn)觸控

2012-08-17 09:01:51

Windows 8操作系統(tǒng)

2012-07-20 17:03:35

Windows 8鍵盤

2010-05-05 13:16:02

Windows PhoWindows CE

2009-05-13 08:57:02

微軟Windows 7操作系統(tǒng)

2011-07-18 22:13:04

一體機(jī)用戶體驗(yàn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)