Pemecahan Masalah Aplikasi

Bagian ini memberikan solusi untuk masalah umum.

Pemecahan Masalah Umum

Category Deskripsi
Masalah Saya menjalankan fitur Windows Server 2008 dan Windows Touch tidak berfungsi.
Penyebab Anda belum mengaktifkan Pengalaman Desktop.
Solution Buka alat administratif Manajer Server: klik Mulai, arahkan ke Alat Administratif, lalu klik Manajer Server. Klik item Fitur di kolom kiri. Klik Tambahkan Fitur di bagian Fitur . Pilih Pengalaman Desktop, klik Berikutnya, lalu klik Instal.

 

Category Deskripsi
Masalah Setiap kali saya menggerakkan jari saya dengan cepat di seluruh aplikasi saya, panah muncul dan gerakan atau manipulasi saya tidak mendaftar dengan benar.
Penyebab Mengaktifkan berkedot saat Anda tidak membutuhkannya.
Solution Anda telah mengaktifkan berkedot ketika Anda ingin dinonaktifkan. Lihat Dukungan Warisan untuk Panning dengan Bilah Gulir untuk informasi tentang menonaktifkan jentik pena.

 

Masalah Saya tidak dapat membedakan antara input mouse dan input Windows Touch.
Penyebab Windows menghasilkan pesan mouse untuk dukungan warisan ketika pengguna mengklik layar.
Solution Anda dapat memanggil GetMessageExtraInfo untuk pesan WM_LBUTTONDOWN dan WM_LBUTTONUP untuk menentukan sumbernya. Kode berikut menunjukkan bagaimana hal ini dapat dilakukan.

C++
#define MOUSEEVENTF_FROMTOUCH 0xFF515700 

if ((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) { // Click was generated by wisptis / Windows Touch }else{ // Click was generated by the mouse. }

 

Category Deskripsi
Masalah Bagaimana cara menjalankan aplikasi Microsoft PixelSense di Windows 7?
Penyebab Windows Touch dan Microsoft PixelSense tidak kompatibel.
Solution Anda harus menargetkan platform Windows 7 atau platform Microsoft PixelSense.

 

Pemecahan Masalah Manipulasi dan Inertia

Category Deskripsi
Masalah Aplikasi saya membeku tanpa alasan. Saya mendapatkan pelanggaran akses saat menginisialisasi antarmuka objek saya.
Penyebab Kehilangan panggilan ke CoInitialize saat menggunakan antarmuka IManipulationProcessor atau IInertiaProcessor.
Solution Ini dapat disebabkan oleh membuat instans objek Windows Touch Component Object Model (COM) tanpa memanggil CoInitialize. Ini kadang-kadang terjadi ketika Anda mengonversi proyek dari menggunakan gerakan menjadi menggunakan manipulasi atau antarmuka inertia.

 

Category Deskripsi
Masalah Objek saya berputar dengan tidak tepat ketika sedang diterjemahkan. Rotasi satu jari tidak berfungsi dengan benar.
Penyebab Mengatur pivot secara tidak benar pada objek.
Solution Anda tidak menyiapkan titik pivot manipulasi dengan benar. Atur properti PivotPointX dan PivotPointY ke tengah objek atau titik yang ingin Anda putar, dan atur properti PivotRadius ke radius objek Anda.

 

Pemecahan Masalah Input Sentuhan Windows

Category Deskripsi
Masalah Setelah saya menangani pesan WM_TOUCH , saya berhenti mendapatkan umpan balik batas.
Penyebab Mengkonsumsi pesan WM_TOUCH tanpa menanganinya.
Solution Anda mungkin menggunakan pesan Windows Touch tanpa meneruskannya ke DefWindowProc, yang akan mengakibatkan perilaku yang tidak terduga. Periksa Memulai Pesan Sentuh Windows untuk informasi selengkapnya tentang cara menangani pesan WM_TOUCH dengan benar.

 

Masalah Saya termasuk windows.h, tetapi masih mengatakan bahwa WM_TOUCH tidak ditentukan.
Penyebab Versi Windows di Targetver.h salah.
Solution Anda belum mengatur versi Windows yang benar dalam proyek Anda. Kode berikut mengilustrasikan versi Windows yang diatur dengan benar untuk Windows Touch di Windows 7.
C++
#ifndef WINVER                  // Specify that the minimum required platform is Windows 7.
#define WINVER 0x0601           
#endif

 

Masalah Input sentuhan saya koordinat x dan koordinat y tampaknya tidak valid. Mereka adalah nilai yang lebih besar dari yang saya harapkan atau nilai negatif.
Penyebab Anda mungkin perlu mengonversi titik sentuh Anda menjadi piksel, atau Anda mungkin perlu mengonversi koordinat layar.
Solution Pastikan Anda memanggil TOUCH_COORD_TO_PIXEL dan ScreenToClient. Kode berikut menunjukkan cara melakukannya.
C++
      POINT ptInput;
      if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))){
        for (int i=0; i < static_cast<INT>(cInputs); i++){
          TOUCHINPUT ti = pInputs[i];                       
          if (ti.dwID != 0){                
            // Do something with your touch input handle.
            ptInput.x = TOUCH_COORD_TO_PIXEL(ti.x);
            ptInput.y = TOUCH_COORD_TO_PIXEL(ti.y);
            ScreenToClient(hWnd, &ptInput);
            points[ti.dwID][0] = ptInput.x;
            points[ti.dwID][1] = ptInput.y;
          }
        }
      }

Catatan:
Untuk menggunakan fungsi ScreenToClient , Anda harus memiliki dukungan DPI yang tinggi di aplikasi Anda. Untuk informasi selengkapnya tentang mendukung DPI tinggi, kunjungi bagian DPI Tinggi MSDN.

 

 

Category Deskripsi
Masalah Saya tidak melihat pesan WM_TOUCH, tetapi saya tahu bahwa Windows Touch berfungsi karena saya melihat pesan WM_GESTURE.
Penyebab Kehilangan panggilan ke RegisterTouchWindow.
Solution pesan WM_TOUCH dan WM_GESTURE saling eksklusif. Jika Anda tidak memanggil RegisterTouchWindow, Anda hanya akan menerima pesan WM_GESTURE.

 

Category Deskripsi
Masalah Saya melihat penundaan kecil sejak saya menyentuh jari saya ke bawah ketika saya mendapatkan input dalam aplikasi saya.
Penyebab Penolakan telapak tangan menyebabkan keterlambatan input.
Solution Jika TWF_WANTPALM diatur dalam panggilan ke RegisterTouchWindow, penolakan telapak tangan diaktifkan. Ini menyebabkan penundaan kecil (100 ms) sementara perangkat lunak menguji apakah input berasal dari jari, pena, atau telapak tangan pengguna. Nonaktifkan penolakan telapak tangan dengan memanggil RegisterTouchWindow dengan bendera TWF_WANTPALM dihapus.

 

Pemecahan Masalah Windows Touch Gestures

Category Deskripsi
Masalah Setelah menangani pesan WM_GESTURE , saya berhenti mendapatkan umpan balik batas. Atau, gerakan yang bekerja sebelumnya tidak berfungsi sekarang.
Penyebab Mengkonsumsi pesan WM_GESTURE tanpa menanganinya.
Solution Anda mungkin menggunakan pesan Windows Touch tanpa meneruskannya ke DefWindowProc, yang akan mengakibatkan perilaku yang tidak terduga. Periksa Memulai Gerakan Windows untuk informasi selengkapnya tentang cara menangani pesan WM_GESTURE dengan benar.

 

Category Deskripsi
Masalah Saya tidak melihat pesan WM_GESTURE, tetapi saya tahu bahwa Windows Touch berfungsi karena saya melihat pesan WM_TOUCH.
Penyebab Memanggil RegisterTouchWindow.
Solution pesan WM_TOUCH dan WM_GESTURE saling eksklusif. Jika Anda memanggil RegisterTouchWindow, Anda tidak akan menerima pesan WM_GESTURE .

 

Masalah Saya tidak melihat semua gerakan yang saya harapkan untuk melihat. Misalnya, saya melihat gerakan dengan pengidentifikasi GID_PAN tetapi tidak GID_ROTATE.
Penyebab Beberapa gerakan, seperti gerakan putar, tidak diaktifkan secara default.
Solution Anda perlu memanggil SetGestureConfig saat menerima pesan WM_GESTURENOTIFY seperti yang dijelaskan dalam referensi WM_GESTURENOTIFY, atau Anda perlu menambahkan handler untuk pesan WM_GESTURENOTIFY. Kode berikut menunjukkan bagaimana handler dapat diimplementasikan untuk mengaktifkan dukungan untuk rotasi.

C++
Peta pesan. BEGIN_MESSAGE_MAP() ON_WM_CREATE() ... ... ... ON_MESSAGE(WM_GESTURENOTIFY, OnWindowsGestureNotify) END_MESSAGE_MAP() 

LRESULT CTestWndApp::OnWindowsGestureNotify( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ){ GESTURECONFIG gc; gc.dwID = GID_ROTATE; // Pengidentifikasi gerakan. gc.dwWant = GC_ROTATE; Perintah gerakan yang Anda aktifkan untuk GID_ROTATE. gc.dwBlock = 0; Jangan halangi apapun. UiGc uINT = 1; Jumlah gerakan yang ditetapkan.

BOOL bResult = SetGestureConfig(g_hMainWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG)); if(!bResult) { // Terjadi kesalahan, laporkan kesalahan menggunakan pengelogan pilihan Anda. }

return 0; }

Untuk contoh konfigurasi gerakan umum lainnya, lihat SetGestureConfig.

 

Category Deskripsi
Masalah Bilah gulir kustom di aplikasi saya tidak menggulir saat saya melakukan gerakan pan.
Penyebab Handler yang hilang untuk pesan WM_*SCROLL yang benar.
Solution Anda tidak menangani semua pesan WM_*SCROLL di bilah gulir kustom Anda. Disarankan agar Anda menangani pesan WM_GESTURE daripada mempertahankan fungsionalitas bilah gulir kustom melalui dukungan warisan. Anda perlu mendukung pesan sebagaimana dirinci di bagian Dukungan Warisan untuk Panning dengan bilah Gulir.

 

Category Deskripsi
Masalah Saya mendapatkan keterlambatan untuk gerakan.
Penyebab Flicks mungkin menyebabkan keterlambatan untuk gerakan.
Solution Flicks dapat menyebabkan penundaan berapa lama waktu yang dibutuhkan aplikasi Anda untuk menerima pesan WM_GESTURE. Lihat Dukungan Warisan untuk Panning dengan Bilah Gulir untuk informasi tentang menonaktifkan berkedip.

 

Panduan Pemrograman