Aracılığıyla paylaş


Uygulama Sorunlarını Giderme

Bu bölüm yaygın sorunların çözümlerini sunar.

Genel Sorun Giderme

Kategori Açıklama
Sorun Windows Server 2008 çalıştırıyorum ve Windows Touch özellikleri çalışmıyor.
Neden Masaüstü Deneyimi'ni etkinleştirmemişsiniz.
Çözüm Sunucu Yöneticisi yönetim aracını açın: Başlangıç'a tıklayın, Yönetim Araçlarıüzerine gelin ve Sunucu Yöneticisiöğesine tıklayın. Sol sütundaki Özellikler öğesine tıklayın. Özellikler bölümünde Özellik Ekle tıklayın. Masaüstü Deneyimi'ni seçin, İleri 'e tıklayın ve sonra Yükleöğesine tıklayın.

 

Kategori Açıklama
Sorun Parmağımı uygulamam boyunca hızlı bir şekilde hareket ettirdiğim her durumda bir ok görünür ve hareketim veya düzenlemem doğru kaydedilmiyor.
Neden İhtiyacınız olmadığında kaydırma hareketlerinin etkinleştirilmesi.
Çözüm Flickler devre dışı bırakılmasını istediğinizde etkinleştirilmiştir. Kalem hareketlerini devre dışı bırakma hakkında bilgi için bkz. Kaydırma Çubuklarıyla Kaydırma Eski Desteği.

 

Sorun Fare girişiyle Windows Touch girişi arasında fark kuramıyorum.
Neden Windows, kullanıcı ekrana tıkladığında eski destek için fare iletileri oluşturur.
Çözüm Kaynağı belirlemek için WM_LBUTTONDOWN ve WM_LBUTTONUP iletileri için GetMessageExtraInfo çağırabilirsiniz. Aşağıdaki kod bunun nasıl yapılabilmesini göstermektedir.

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. }

 

Kategori Açıklama
Sorun Windows 7'de Microsoft PixelSense uygulamalarını nasıl çalıştıracağım?
Neden Windows Touch ve Microsoft PixelSense uyumsuz.
Çözüm Windows 7 platformunu veya Microsoft PixelSense platformunu hedeflemeniz gerekir.

 

Manipülasyonlar ve Eylemsizlik Sorunlarını Giderme

Kategori Açıklama
Sorun Uygulamam sebepsiz yere donuyor. Nesne arabirimlerimi başlatırken erişim ihlalleri alıyorum.
Neden IManipulationProcessor veya IInertiaProcessor arabirimleri kullanılırken CoInitialize çağrısı eksik.
Çözüm Bunun nedeni, CoInitialize çağrısı yapmadan Windows Touch Component Object Model (COM) nesnelerinin örneğini oluşturma olabilir. Bu durum bazen projeleri hareketleri kullanmaktan işlemeleri veya eylemsizlik arabirimlerini kullanmaya dönüştürdüğünüzde ortaya çıkar.

 

Kategori Açıklama
Sorun Nesnem çevrilirken yanlış dönüyor. Tek parmak döndürme düzgün çalışmıyor.
Neden Bir nesnedeki pivot'ları yanlış ayarlama.
Çözüm Siz maniplasyon dönme noktalarını doğru ayarlayamıyorsunuz. PivotPointXve PivotPointYözelliklerini döndürmek istediğiniz nesnenin veya noktanın merkezineve PivotRadius özelliğini nesnenizin yarıçapı olarak ayarlayın.

 

Windows Dokunma Girişi sorunlarını giderme

Kategori Açıklama
Sorun WM_TOUCH iletisini işledikten sonra sınır geri bildirimi almayı durduruyorum.
Neden WM_TOUCH mesajını işlem yapmadan tüketme.
Çözüm Windows Touch iletisini büyük olasılıkla DefWindowProc'e iletmeden kullanıyorsunuzdur ve bu da beklenmeyen davranışa neden olur. WM_TOUCH iletileri düzgün şekilde işleme hakkında daha fazla bilgi için Windows Dokunmatik İletileri kullanmaya başlama denetleyin.

 

Sorun Windows.h dosyasını da dahil ediyorum, ancak yine de WM_TOUCH tanımlanmadığını söylüyor.
Neden Targetver.h'deki Windows sürümü yanlış.
Çözüm Projenizde doğru Windows sürümünü ayarlamadınız. Aşağıdaki kod, Windows 7'de Windows Touch için düzgün ayarlanmış Windows sürümlerini gösterir.
C++
#ifndef WINVER                  // Specify that the minimum required platform is Windows 7.
#define WINVER 0x0601           
#endif

 

Sorun Dokunmatik giriş x koordinatlarım ve y koordinatlarım geçersiz görünüyor. Bunlar beklediğimden daha büyük değerler veya negatif değerler.
Neden Dokunma noktalarınızı piksellere dönüştürmeniz veya ekran koordinatlarını dönüştürmeniz gerekebilir.
Çözüm TOUCH_COORD_TO_PIXEL ve ScreenToClientçağırdığınızdan emin olun. Aşağıdaki kod bunun nasıl yapılacağını gösterir.
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;
          }
        }
      }

Not:
ScreenToClient işlevini kullanmak için uygulamanızda yüksek DPI desteğine sahip olmanız gerekir. Yüksek DPI'yi destekleme hakkında daha fazla bilgi için bkz. Yüksek DPI.

 

 

Kategori Açıklama
Sorun WM_TOUCH iletileri görmüyorum, ancak WM_GESTURE iletileri gördüğüm için Windows Touch'ın çalıştığını biliyorum.
Neden RegisterTouchWindowçağrısı eksik.
Çözüm WM_TOUCH ve WM_GESTURE iletileri birbirini dışlar. RegisterTouchWindowçağırmıyorsanız yalnızca WM_GESTURE iletileri alırsınız.

 

Kategori Açıklama
Sorun Parmağıma dokunduğum zamandan uygulamamda giriş yaptığım zamana kadar olan küçük gecikmeleri fark ediyorum.
Neden Avuç içi algılama hatası girdide gecikmelere neden oluyor.
Çözüm TWF_WANTPALM, RegisterTouchWindowçağrılarında ayarlandığında avuç içi reddetme etkinleştirilir. Bu, yazılım girişin parmaktan mı, kalemden mi yoksa kullanıcının avucundan mı geldiğini test ederken küçük bir (100 ms) gecikmeye neden olur. TWF_WANTPALM bayrağı temizlenmiş RegisterTouchWindow çağırarak avuç içi reddetmeyi devre dışı bırakın.

 

Windows Dokunma Hareketleri sorunlarını giderme

Kategori Açıklama
Sorun WM_GESTURE iletisini işledikten sonra sınır geri bildirimi almayı durduruyorum. Veya daha önce çalışan bir hareket şimdi çalışmıyor.
Neden WM_GESTURE iletisini işlenmeden tüketme.
Çözüm Windows Touch iletisini büyük olasılıkla DefWindowProc'e iletmeden kullanıyorsunuzdur ve bu da beklenmeyen davranışa neden olur. WM_GESTURE iletilerini doğru bir şekilde işlemek için daha fazla bilgiye 'Windows Hareketlerine Başlarken' göz atın.

 

Kategori Açıklama
Sorun WM_GESTURE ileti görmüyorum, ancak WM_TOUCH iletileri gördüğüm için Windows Touch'ın çalıştığını biliyorum.
Neden RegisterTouchWindowçağrısı.
Çözüm WM_TOUCH ve WM_GESTURE iletileri birbirini dışlar. RegisterTouchWindowçağırırsanız, WM_GESTURE iletileri almazsınız.

 

Sorun Görmeyi beklediğim hareketlerin tümünü göremiyorum. Örneğin, tanımlayıcı GID_PAN hareketlerini görüyorum, ancak GID_ROTATEolanları görmüyorum.
Neden Döndürme hareketi gibi bazı hareketler varsayılan olarak etkinleştirilmez.
Çözüm WM_GESTURENOTIFY başvurusunda açıklandığı gibi bir WM_GESTURENOTIFY iletisi aldığınızda SetGestureConfig çağırmanız veya WM_GESTURENOTIFY iletisi için bir işleyici eklemeniz gerekir. Aşağıdaki kod, döndürme desteğini etkinleştirmek için bir işleyicinin nasıl uygulanabileceğini gösterir.

C++
              
              // İleti eşlemesi. 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; // Hareket tanımlayıcısı. gc.dwWant = GC_ROTATE; GID_ROTATE için etkinleştirdiğiniz hareket komutu. gc.dwBlock = 0; Hiçbir şeyi engelleme. UINT uiGcs = 1; Ayarlanan hareketlerin sayısı.

BOOL bResult = SetGestureConfig(g_hMainWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG)); if(!bResult) { // Bir sorun oluştu, hatayı tercih ettiğiniz günlüğü kullanarak bildirin. }

return 0; }

Tipik hareket yapılandırmalarına daha fazla örnek için bkz. SetGestureConfig.

 

Kategori Açıklama
Sorun Kaydırma hareketini gerçekleştirdiğimde uygulamamdaki özel kaydırma çubukları kaydırılmıyor.
Neden Doğru WM_*SCROLL iletileri için işleyiciler eksik.
Çözüm Özel kaydırma çubuklarınızdaki tüm WM_*SCROLL iletilerini işlemezsiniz. Eski destek aracılığıyla özel kaydırma çubuğu işlevselliğini korumak yerine WM_GESTURE iletisini işlemeniz önerilir. Kaydırma Çubuklarıyla Kaydırma için Eski Destekbölümünde ayrıntılı olarak açıklandığı gibi mesajları desteklemeniz gerekir.

 

Kategori Açıklama
Sorun Hareketlerde gecikmeler yaşıyorum.
Neden Dokunuşlar el hareketleri için gecikmelere neden oluyor.
Çözüm Dokunma hareketleri, uygulamanızın WM_GESTURE iletilerini alması için geçen sürede gecikmelere neden olabilir. Kaydırma Çubuklarıyla Kaydırma için Eski Destek başlıklı belgede, flickleri devre dışı bırakma hakkında bilgi için bakınız.

 

Programlama Kılavuzu