Mulai Menggunakan Windows Touch Gestures
Bagian ini menjelaskan langkah-langkah dasar untuk menggunakan gerakan multitouch.
Langkah-langkah berikut biasanya dilakukan saat menggunakan gerakan Windows Touch:
- Siapkan jendela untuk menerima gerakan.
- Menangani pesan gerakan.
- Menginterpretasikan pesan gerakan.
Menyiapkan Jendela untuk Menerima Gerakan
Secara default, Anda menerima pesan WM_GESTURE .
Catatan
Jika Anda memanggil RegisterTouchWindow, Anda akan berhenti menerima pesan WM_GESTURE . Jika Anda tidak menerima pesan WM_GESTURE , pastikan Anda belum memanggil RegisterTouchWindow.
Kode berikut menunjukkan implementasi InitInstance sederhana.
#include <windows.h>
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
Menangani Pesan Gerakan
Mirip dengan menangani pesan input Windows Touch, Anda dapat menangani pesan gerakan dalam banyak cara. Jika Anda menggunakan Win32, Anda dapat memeriksa pesan WM_GESTURE di WndProc. Jika Anda membuat jenis aplikasi lain, Anda dapat menambahkan pesan WM_GESTURE ke peta pesan lalu menerapkan handler kustom.
Kode berikut menunjukkan bagaimana pesan gerakan dapat ditangani.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_GESTURE:
// Insert handler code here to interpret the gesture.
return DecodeGesture(hWnd, message, wParam, lParam);
Menginterpretasikan Pesan Gerakan
Fungsi GetGestureInfo digunakan untuk menginterpretasikan pesan gerakan ke dalam struktur yang menjelaskan gerakan. Strukturnya, GESTUREINFO, memiliki informasi tentang gerakan seperti lokasi di mana gerakan dilakukan dan jenis gerakan. Kode berikut menunjukkan bagaimana Anda dapat mengambil dan menginterpretasikan pesan gerakan.
LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
// Create a structure to populate and retrieve the extra message info.
GESTUREINFO gi;
ZeroMemory(&gi, sizeof(GESTUREINFO));
gi.cbSize = sizeof(GESTUREINFO);
BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gi);
BOOL bHandled = FALSE;
if (bResult){
// now interpret the gesture
switch (gi.dwID){
case GID_ZOOM:
// Code for zooming goes here
bHandled = TRUE;
break;
case GID_PAN:
// Code for panning goes here
bHandled = TRUE;
break;
case GID_ROTATE:
// Code for rotation goes here
bHandled = TRUE;
break;
case GID_TWOFINGERTAP:
// Code for two-finger tap goes here
bHandled = TRUE;
break;
case GID_PRESSANDTAP:
// Code for roll over goes here
bHandled = TRUE;
break;
default:
// A gesture was not recognized
break;
}
}else{
DWORD dwErr = GetLastError();
if (dwErr > 0){
//MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
}
}
if (bHandled){
return 0;
}else{
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk