成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不用鼠標 雙指觸控Windows 7的API揭秘

系統
Windows 7有一些酷炫的功能是XP、Vista系統沒有的,例如窗口分組預覽、快速隱藏桌面圖標、搖走其他窗口……這些酷炫的功能是怎么設計的?我們開發的個人軟件如何使用這些功能,給用戶帶來驚喜?
Windows 7有一些酷炫的功能是XP、Vista系統沒有的,例如窗口分組預覽、快速隱藏桌面圖標、搖走其他窗口……這些酷炫的功能是怎么設計的?我們開發的個人軟件如何使用這些功能,給用戶帶來驚喜?

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

  常用的兩種手勢

  1.縮放手勢

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

不用鼠標 用雙指掌控Windows 7


  程序要識別出這個手勢,***步,要得到手指點到屏幕的消息。第二步,根據兩指的坐標計算出距離,根據一個經驗值對兩指距離進行比較,來得到這是兩指分開或兩指并攏。第三步,可以根據一個定時器來實時捕捉手指點的坐標,來計算出移動方向及速率,進一步就可判斷出兩指是反向滑動還是相向滑動。

  2.平移手勢

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

不用鼠標 用雙指掌控Windows 7


  可以在一個定時器中實時捕捉手指坐標,計算出速率和加速度,可以通過一個經驗值去和加速度比較,當加速度比較大的時候,可以認為是翻頁,反之則是拖動。當然,這還不夠,當拖動時,還需要進一步判斷是否到達程序邊界,如果到達邊界,也認為是翻頁。對于翻頁的處理,向左快速移動或到達左邊界,則認為是上一頁。

  雙指觸控API揭秘

  雙指觸控的核心是把原始觸摸數據放入運動模型中去計算,以識別出用戶的手勢。原始觸摸數據可以從WM_TOUCH消息中得到。通過WM_TOUCH識別出縮放和平移手勢。

  ***步:檢查多點觸控硬件

  這里使用GetSystemMetrics  API來獲取硬件是不是就緒:

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

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

  在默認情況下,Win 7默認提供 WM_GESTURE(手勢)消息。這個手勢是系統根據原始觸摸數據來識別的手勢,使用 RegisterTouchWindow API函數可讓系統返回WM_TOUCH原始觸摸輸入消息,核心代碼:

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

  第三步:得到原始觸摸數據

  使用GetTouchInputInfo API得到原始觸摸數據,核心代碼:

  GetTouchInputInfo((HTOUCHINPUT)lParam,numInputs,ti,sizeof(TOUCHINPUT)))
  numInputs為預先聲明的變量,用于存儲有幾個觸摸點,如果是5個手指同時在屏幕滑動,那么numInputs就為5。
  ti是TOUCHINPUT結構,其包含了觸點的X和Y坐標、發生時間、觸摸類型(類似于鼠標按下、鼠標移動、鼠標釋放等)。

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

  這里的觸點按下、移動、釋放等函數,實際上是一個運動仿真模型,我們在模型中,要將觸點的軌跡生成若干條運動曲線,并計算出每個點的方位角、速率、法向加速度、切向加速度等,以識別出具體的手勢。

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

【編輯推薦】

  1. 使用Windows 7構建更好的測量系統
  2. 精簡版Windows7修改版Windows7被指很不安全
  3. ***重要升級Windows 7 SP1測試版發布
責任編輯:龐桂玉 來源: 網易科技
相關推薦

2010-01-09 15:14:29

Windows 7多點觸摸

2009-09-17 08:38:29

Windows 7觸摸屏多點觸摸

2009-05-28 09:35:52

2009-10-12 19:39:43

Windows 7多點觸摸

2009-11-11 09:02:57

Windows 7多點觸摸

2009-03-15 10:24:18

Windows 7新功能

2009-04-15 08:41:36

2009-06-04 09:03:28

微軟Windows 7操作系統

2009-11-04 08:56:03

Windows 7觸摸屏

2009-06-04 09:12:08

2013-09-23 09:36:13

Windows 8Firefox

2009-03-14 19:01:08

Windows 7新特性多點觸摸

2012-08-17 16:35:15

Windows 8操作系統

2011-02-15 14:24:57

Windows 8多點觸控

2012-08-17 09:01:51

Windows 8操作系統

2012-06-06 14:26:46

視頻Windows 8

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操作系統

2011-07-18 22:13:04

一體機用戶體驗
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲精品 | 欧美中文字幕一区二区 | 亚洲精品一区二区三区蜜桃久 | 欧美日韩精品久久久免费观看 | 国产精品亚洲综合 | 日韩欧美一区二区三区四区 | 日本一区二区高清不卡 | 一级毛片观看 | 欧美亚洲免费 | 一区中文字幕 | 亚洲高清在线视频 | 国产精品黄视频 | 91视视频在线观看入口直接观看 | 成人毛片视频在线播放 | 亚洲成人一区二区三区 | 欧美黄色精品 | 色网站在线免费观看 | 久久久久久久夜 | 午夜精品久久久久久久久久久久 | 高清一区二区三区 | 中文字幕一区二区三区四区五区 | 精品欧美一区二区三区久久久 | 一级欧美日韩 | 国产在线中文字幕 | 欧美精品福利 | a在线视频| 久久久久国产一级毛片高清网站 | 99精品在线 | 2021天天躁夜夜看 | 午夜看电影在线观看 | 久久久91精品国产一区二区三区 | 男女免费视频网站 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 中文字幕在线看人 | 999精品视频 | 色永久| 91精品国产综合久久香蕉922 | 成在线人视频免费视频 | 日本不卡高清视频 | 美女午夜影院 | 在线一区视频 |