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_MOVE 或 TOUCHEVENTF_UP結合。 |
TOUCHEVENTF_UP | 0x0004 | 已移除觸控點。 |
TOUCHEVENTF_INRANGE | 0x0008 | 觸控點位於範圍內。 此旗標用來在相容的硬體上啟用觸控暫留支援。 不想支援暫留的應用程式可以忽略此旗標。 |
TOUCHEVENTF_PRIMARY | 0x0010 | 表示這個 TOUCHINPUT 結構對應於主要接觸點。 如需主要觸控點的詳細資訊,請參閱下列文字。 |
TOUCHEVENTF_NOCOALESCE | 0x0020 | 使用 GetTouchInputInfo 接收時,此輸入並未聯合。 |
TOUCHEVENTF_PEN | 0x0040 | 觸控事件是由手寫筆裝置所觸發。 |
TOUCHEVENTF_PALM | 0x0080 | 觸控事件是由使用者的手掌所觸發。 |
旗標 | 值 | Description |
---|---|---|
TOUCHINPUTMASKF_CONTACTAREA | 0x0004 | cxContact 和 cyContact 有效。 如需主要觸控點的詳細資訊,請參閱下列文字。 |
TOUCHINPUTMASKF_EXTRAINFO | 0x0002 | dwExtraInfo 有效。 |
TOUCHINPUTMASKF_TIMEFROMSYSTEM | 0x0001 | 系統時間是在 TOUCHINPUT 結構中設定。 |
當觸控點是從沒有觸控點的先前狀態建立的第一個觸控點時,就會將觸控點指定為主要點。 TOUCHEVENTF_PRIMARY旗標會繼續針對主要觸控點的所有後續事件設定,直到主要觸控點釋放為止。 請注意,主要觸控點上的 TOUCHEVENTF_UP 事件不一定指定 Windows Touch 作業的結尾;目前的 Windows Touch 作業會從主要觸控點的建立開始,直到釋放最後一個觸控點為止。
請注意,在一組同時觸控點中,第一個要偵測到的觸控點是指定主要點。 系統滑鼠位置會遵循主要觸控點,除了觸控訊息之外,還會產生 WM_LBUTTONDOWN、 WM_MOUSEMOVE和 WM_LBUTTONUP 訊息,以回應主要觸控點上的動作。 主要觸控點也可以使用按住手勢來產生 WM_RBUTTONDOWN 和 WM_RBUTTONUP 訊息。
請注意,只要觸控點持續存在,觸控點標識符可能會是動態的,而且只會與指定的觸控點相關聯。 例如,如果接觸中斷,然後繼續 (,如果手指從表面移除,然後再次按下) ,則相同的觸控點 (相同的手指、手寫筆或其他這類裝置) 可能會收到不同的觸控點標識符。
下列類型定義為表示 TOUCHINPUT 結構的常數指標。
typedef TOUCHINPUT const * PCTOUCHINPUT;
範例
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) |