共用方式為


TOUCHINPUT 結構 (winuser.h)

封裝觸控輸入的數據。

語法

typedef struct tagTOUCHINPUT {
  LONG      x;
  LONG      y;
  HANDLE    hSource;
  DWORD     dwID;
  DWORD     dwFlags;
  DWORD     dwMask;
  DWORD     dwTime;
  ULONG_PTR dwExtraInfo;
  DWORD     cxContact;
  DWORD     cyContact;
} TOUCHINPUT, *PTOUCHINPUT;

成員

x

觸控輸入的水準點 (X 座標) 。 此成員以實體螢幕座標的百分之一圖元表示。

y

觸控輸入的 Y 座標 (垂直點) 。 此成員以實體螢幕座標的百分之一圖元表示。

hSource

來源輸入裝置的裝置句柄。 每個裝置都會在運行時間由觸控輸入提供者提供唯一的提供者。 See Examples section below.

dwID

區分特定觸控輸入的觸控點標識碼。 這個值會保持一致的觸控接觸順序,從聯繫人關閉到恢復為止。 稍後可能會重複使用標識碼以供後續聯繫人使用。

dwFlags

一組位旗標,指定觸控點按下、放開和動作的各種層面。 此成員中的位可以是一節中值的任何合理組合。

dwMask

一組位旗標,指定結構中的哪一個選擇性欄位包含有效值。 選擇性欄位中有效資訊的可用性是裝置特定的。 只有當在 dwMask 中設定對應的位時,應用程式才應該使用選擇性的域值。 此欄位可能包含一節中所述的 dwMask 旗標組合。

dwTime

事件的時間戳,以毫秒為單位。 取用的應用程式應該注意,系統不會對此欄位執行驗證;未設定 TOUCHINPUTMASKF_TIMEFROMSYSTEM 旗標時,此欄位中值的精確度和排序完全取決於觸控輸入提供者。

dwExtraInfo

與觸控事件相關聯的額外值。

cxContact

實體螢幕座標中百分之一像素的觸控接觸區域寬度。 只有在 dwMask 成員已設定 TOUCHEVENTFMASK_CONTACTAREA 旗標時,這個值才有效。

cyContact

實體螢幕座標中百分之一像素的觸控接觸區域高度。 只有在 dwMask 成員已設定 TOUCHEVENTFMASK_CONTACTAREA 旗標時,這個值才有效。

備註

下表列出 dwFlags 成員的旗標。

旗標 Description
TOUCHEVENTF_MOVE 0x0001 發生移動。 無法與 TOUCHEVENTF_DOWN合併。
TOUCHEVENTF_DOWN 0x0002 對應的觸控點是透過新的聯繫人所建立。 無法與 TOUCHEVENTF_MOVETOUCHEVENTF_UP結合。
TOUCHEVENTF_UP 0x0004 已移除觸控點。
TOUCHEVENTF_INRANGE 0x0008 觸控點位於範圍內。 此旗標用來在相容的硬體上啟用觸控暫留支援。 不想支援暫留的應用程式可以忽略此旗標。
TOUCHEVENTF_PRIMARY 0x0010 表示這個 TOUCHINPUT 結構對應於主要接觸點。 如需主要觸控點的詳細資訊,請參閱下列文字。
TOUCHEVENTF_NOCOALESCE 0x0020 使用 GetTouchInputInfo 接收時,此輸入並未聯合。
TOUCHEVENTF_PEN 0x0040 觸控事件是由手寫筆裝置所觸發。
TOUCHEVENTF_PALM 0x0080 觸控事件是由使用者的手掌所觸發。
 
注意 如果計算機上的目標硬體不支援暫留,當 設定TOUCHEVENTF_UP 旗標時,就會清除 TOUCHEVENTF_INRANGE 旗標。 如果計算機上的目標硬體支援暫留,則會獨立設定 TOUCHEVENTF_UPTOUCHEVENTF_INRANGE 旗標。
 
下表列出 dwMask 成員的旗標。
旗標 Description
TOUCHINPUTMASKF_CONTACTAREA 0x0004 cxContactcyContact 有效。 如需主要觸控點的詳細資訊,請參閱下列文字。
TOUCHINPUTMASKF_EXTRAINFO 0x0002 dwExtraInfo 有效。
TOUCHINPUTMASKF_TIMEFROMSYSTEM 0x0001 系統時間是在 TOUCHINPUT 結構中設定。
 

當觸控點是從沒有觸控點的先前狀態建立的第一個觸控點時,就會將觸控點指定為主要點。 TOUCHEVENTF_PRIMARY旗標會繼續針對主要觸控點的所有後續事件設定,直到主要觸控點釋放為止。 請注意,主要觸控點上的 TOUCHEVENTF_UP 事件不一定指定 Windows Touch 作業的結尾;目前的 Windows Touch 作業會從主要觸控點的建立開始,直到釋放最後一個觸控點為止。

請注意,在一組同時觸控點中,第一個要偵測到的觸控點是指定主要點。 系統滑鼠位置會遵循主要觸控點,除了觸控訊息之外,還會產生 WM_LBUTTONDOWNWM_MOUSEMOVEWM_LBUTTONUP 訊息,以回應主要觸控點上的動作。 主要觸控點也可以使用按住手勢來產生 WM_RBUTTONDOWNWM_RBUTTONUP 訊息。

請注意,只要觸控點持續存在,觸控點標識符可能會是動態的,而且只會與指定的觸控點相關聯。 例如,如果接觸中斷,然後繼續 (,如果手指從表面移除,然後再次按下) ,則相同的觸控點 (相同的手指、手寫筆或其他這類裝置) 可能會收到不同的觸控點標識符。

下列類型定義為表示 TOUCHINPUT 結構的常數指標。


   typedef TOUCHINPUT const * PCTOUCHINPUT;
    

範例

注意 在下列範例中, 不會排序 pInputs 陣列。 使用 dwID 值來追蹤特定的觸控點。
 
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
    if (GetTouchInputInfo((HTOUCHINPUT)lParam,
                          cInputs,
                          pInputs,
                          sizeof(TOUCHINPUT)))
    {
        // process pInputs
        if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
        {
            // error handling
        }
    }
    else
    {
        // GetLastError() and error handling
    }
    delete [] pInputs;
}
else
{
    // error handling, presumably out of memory
}
return DefWindowProc(hWnd, message, wParam, lParam);

下列範例示範如何從 hSource 成員取得裝置資訊。 此範例會使用 GetRawInputDevice 來擷取裝置的相關信息。

for (UINT i = 0; i < cInputs; i++){
  TOUCHINPUT ti = pInputs[i];      
  RID_DEVICE_INFO info;
  ZeroMemory(&info, sizeof(RID_DEVICE_INFO));
  info.cbSize = sizeof(RID_DEVICE_INFO);
  UINT size = 0;
  if (GetRawInputDeviceInfo(ti.hSource, RIDI_DEVICEINFO, &info, &size)){
  }else{
    DWORD err = GetLastError();
  }
}

規格需求

需求
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限桌面應用程式]
標頭 winuser.h (包含 Windows.h)

另請參閱

GetTouchInputInfo

結構