0

マルチタッチをサポートする Windows 用のアプリに取り組んでいます。ここにあるガイドに従いました

http://msdn.microsoft.com/en-us/library/windows/desktop/dd744775(v=vs.85).aspx

しかし、私には問題があります。ある時点で指が動かなくなったということは、画面上に指がなくなったにもかかわらず、この指には TOUCHEVENTF_DOWN、TOUCHEVENTF_MOVE があり、TOUCHEVENTF_UP がないことがわかるということです...

私は持っている:

static int fingers = 0;
static LRESULT OnTouch(HWND hWnd, WPARAM wParam, LPARAM lParam );
static LRESULT CALLBACK winProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam);

SetWindowLongPtr(handle, GWL_WNDPROC, (long)winProc);

LRESULT CALLBACK winProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam){
    switch(Msg){
    case WM_TOUCH:
        OnTouch(handle, wParam, lParam);
        break;
...
}

LRESULT OnTouch(HWND hWnd, WPARAM wParam, LPARAM lParam )
{
    BOOL bHandled = FALSE;
    UINT cInputs = LOWORD(wParam);
    PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
    if (pInputs){
        if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))){
            for (UINT i=0; i < cInputs; i++){
            TOUCHINPUT ti = pInputs[i];
            if( ti.dwFlags&TOUCHEVENTF_DOWN ) {
                        fingers+=1;
            }
            else {
                if( ti.dwFlags&TOUCHEVENTF_MOVE) {
                }
                if( ti.dwFlags&TOUCHEVENTF_UP) {
                            fingers-=1;
                }
            }
            bHandled = TRUE;
        }else{
            /* handle the error here */
        }
        delete [] pInputs;
    }else{
        /* handle the error here, probably out of memory */
    }
    if (bHandled){
        // if you handled the message, close the touch input handle and return
        CloseTouchInputHandle((HTOUCHINPUT)lParam);
        return 0;
    }else{
        // if you didn't handle the message, let DefWindowProc handle it
        printf("ERROR\n");
        return DefWindowProc(hWnd, WM_TOUCH, wParam, lParam);
    }
}

画面に触れた後、画面上に実際の指はありませんが、変数の指が != 0....

助けていただければ幸いです。ありがとう。

PS 提案された変更を適用しましたが、まだ指が動かなくなり、指を上げません。

4

1 に答える 1

2

TOUCHEVENTF_MOVE1 つの入力にTOUCHEVENTF_UP組み合わせることができますが、それらが排他的な値であるかのようにテストしています。したがって、'move' と 'up' が同時に来ると、'up' を見逃すことになります。

構造体ドキュメントでは、TOUCHINPUTどのフラグの組み合わせが意味を持つかを指定しています。

于 2013-12-05T20:32:34.433 に答える