Windows Touchアプリケーションのトラブルシューティング-中国語の整理

6410 ワード

アプリケーションのトラブルシューティング
このセクションでは、一般的な問題の解決方法について説明します.
一般的なトラブルシューティング
に質問
Windows Server 2008を実行していますが、Windows Touch機能が機能していません.
の原因となる
デスクトップエクスペリエンス機能が有効になっていません.
解決策
≪サーバー・マネージャ管理ツールを開く|Open Server Manager Management Tools|ldap≫:「≪実行|Go|ldap≫」をクリックして管理ツールに移動し、「≪サーバー・マネージャ|Server Manager|ldap≫」をクリックします.左の列の「機能」アイテムをクリックします.「≪機能|Feature|Emdb≫」セクションで、「≪機能の追加|Add Feature|Emdb≫」をクリックします.[デスクトップエクスペリエンス]を選択し、[次へ]をクリックし、[インストール]をクリックします.
 
に質問
アプリケーションをすばやく指を移動するたびに、矢印が表示され、筆勢や操作が正しく登録されていません.
の原因となる
スクライブ機能は、スクライブ機能が不要な場合に有効になります.
解決策
スクラッチ機能を無効にする必要がある場合は、スクラッチ機能を有効にします.タッチストローク機能を無効にする方法については、スクロールバーを使用してパンする旧版のサポートを参照してください.
 
に質問
マウス入力とWindows Touch入力を区別できません.
の原因となる
ユーザーが画面をクリックすると、Windowsでは旧バージョンのサポートに対してマウスメッセージが生成されます.
解決策
次のいずれかの操作を行います. WM_LBUTTONDOWN および WM_LBUTTONUP メッセージコール GetMessageExtraInfo ソースを特定します.次のコードでは、この操作を実行する方法を示します.

#define MOUSEEVENTF_FROMTOUCH 0xFF515700

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


 
に質問
Windows 7でSurfaceアプリケーションを実行する方法
の原因となる
Windows TouchはMicrosoft Surfaceと互換性がありません.
解決策
Windows 7プラットフォームまたはMicrosoft Surfaceプラットフォームをターゲットにする必要があります.
 
操作と遅延のトラブルシューティング
に質問
私のアプリケーションでは理由もなく凍結が発生しました.オブジェクトインタフェースを初期化するときにアクセス競合が発生しました.
の原因となる
使用中 IManipulationProcessor または IInertiaProcessor インタフェースにCoInitializeの呼び出しがありません.
解決策
CoInitializeを呼び出さずにWindows Touchコンポーネントオブジェクトモデル(COM)オブジェクトをインスタンス化した場合に発生します.このことは、ストロークの使用から操作または遅延インタフェースの使用にアイテムを変換するときに発生することがあります.
 
に質問
私のオブジェクトは変換中に誤った回転をしました.単指回転が正常に動作しない.
の原因となる
オブジェクトの回転軸が正しく設定されていません.
解決策
操作ピボットポイントが正しく設定されていません.将 PivotPointX および PivotPointY アトリビュートをオブジェクトの中心または回転するポイントに設定し、 PivotRadius アトリビュートをオブジェクトの半径に設定します.
 
Windows Touch入力のトラブルシューティング
に質問
私が処理しています. WM_TOUCH メッセージの後、境界フィードバックは二度と取得できません.
の原因となる
未処理 WM_TOUCH メッセージの場合に使用します.
解決策
Windows Touchメッセージを転送せずに使用することもできます. DefWindowProcは、予期せぬ動作を引き起こす可能性があります.正しく処理する方法について WM_TOUCH メッセージの詳細については、「 Windows Touchメッセージ入門.
 
に質問
Windows.hは含まれていますが、まだ定義されていません. WM_TOUCH.
の原因となる
Targetver.hのWindowsバージョンが正しくありません.
解決策
オブジェクトに正しいWindowsバージョンが設定されていません.次のコードは、Windows 7でWindows Touchの正しいWindowsバージョンを設定する方法を示しています.

#ifndef WINVER                  // Specify that the minimum required platform is Windows 7.
#define WINVER 0x0601           
#endif

 
に質問
私のタッチ入力x座標とy座標は無効なようです.これらは、期待値より大きい値であるか、負の値であるかのいずれかです.
の原因となる
タッチポイントをピクセルに変換するか、画面座標を変換する必要があります.
解決策
呼び出し中であることを確認 TOUCH_COORD_TO_PIXEL および ScreenToClient.次のコードでは、この操作を実行する方法を示します.

      POINT ptInput;
      if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))){
        for (int i=0; i < static_cast(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;
          }
        }
      }
注意   使用するには ScreenToClient を選択します.高DPIのサポートの詳細については、MSDNの高DPI(英語のWebページ)セクションを参照してください.
 
に質問
見てないけど WM_TOUCH ニュースですが、Windows Touchが働いているのは知っています.私が見たからです. WM_GESTURE に表示されます.
の原因となる
ペアがありません RegisterTouchWindow を選択してもアクセスできます.
解決策
WM_TOUCH および WM_GESTURE ニュースは互いに反発する.呼び出されていない場合 RegisterTouchWindowは、 WM_GESTURE に表示されます.
 
に質問
私の指が押されてからアプリケーションから入力を取得するまでの過程に少量の遅延があったことに気づきました.
の原因となる
手のひら誤触防止機能により入力が遅れます.
解決策
もしそうなら RegisterTouchWindow の呼び出しでTWF_を設定WANTPALMでは、手のひらの誤触防止機能が有効になります.これにより、ソフトウェアのテスト入力が指、タッチペン、またはユーザーの手のひらから来たため、わずかな(100ミリ秒)遅延が発生します.呼び出し可能 RegisterTouchWindow TWF_をクリアWANTPALMマークは、手のひらの誤触防止機能を無効にします.
 
Windows Touchの筆勢のトラブルシューティング
に質問
私が処理しています. WM_GESTURE メッセージの後、境界フィードバックは二度と取得できません. あるいは、以前は正常に働いていた筆勢が今は正常に働かない.
の原因となる
未処理 WM_GESTURE メッセージはそれを使用します.
解決策
Windows Touchメッセージを転送せずに使用することもできます. DefWindowProcは、予期せぬ動作を引き起こす可能性があります.正しく処理する方法について WM_GESTURE メッセージの詳細については、「 Windowsの筆勢入門.
 
に質問
見てない WM_GESTURE ニュースですが、Windows Touchが働いているのは知っています.私が見たからです. WM_TOUCH に表示されます.
の原因となる
よびだし RegisterTouchWindow.
解決策
WM_TOUCH および WM_GESTURE ニュースは互いに反発する.呼び出した場合 RegisterTouchWindowは、受信しません. WM_GESTURE に表示されます.
 
に質問
表示すべきすべての筆勢は見えませんでした.たとえば、GID_という識別子が表示されます.PANの筆勢ですが、GID_という識別子は見られませんでしたROTATEの筆勢.
の原因となる
既定では、回転ストロークなどのストロークは有効になりません.
解決策
受信する必要があります WM_GESTURENOTIFY 参考にした WM_GESTURENOTIFY メッセージ時に呼び出す SetGestureConfig、または WM_GESTURENOTIFYメッセージ追加ハンドラ.次のコードでは、回転のサポートを有効にするためにプロセッサを実装する方法を示します.

// The message map.
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; // The gesture identifier.
    gc.dwWant  = GC_ROTATE;  // The gesture command you are enabling for GID_ROTATE.
    gc.dwBlock = 0;          // Don't block anything.
    UINT uiGcs = 1;          // The number of gestures being set.
     
    BOOL bResult = SetGestureConfig(g_hMainWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG));
    if(!bResult) {
        // Something went wrong, report the error using your preferred logging.
    }

    return 0;
}  
一般的な筆勢構成の詳細については、「 SetGestureConfig.
 
に質問
移動ストロークを実行すると、アプリケーションのカスタムスクロールバーはスクロールされません.
の原因となる
正しいWM_*がありません.SCROLLメッセージのハンドラ.
解決策
カスタムスクロールバーのすべてのWM_*を処理していません.SCROLLメッセージ.処理を推奨 WM_GESTURE 古いバージョンのサポートではなく、メッセージはカスタムスクロールバー機能を保持します.スクロールバーを使用して移動する旧バージョンのサポートセクションで説明したように、メッセージをサポートする必要があります.
 
に質問
私は筆勢の遅延に遭遇した.
の原因となる
ストローク機能は筆勢の遅延を引き起こす可能性があります.
解決策
スクライブ機能によりアプリケーションが受信されます WM_GESTURE メッセージにかかる時間に遅延が発生しました.スクライブ機能を無効にする方法については、スクロールバーを使用してパンする旧版のサポートを参照してください.