未收到Windows多点触摸TOUCHEVENTF_UP

Windows multi touch TOUCHEVENTF_UP not received

本文关键字:TOUCHEVENTF UP 触摸 多点 Windows      更新时间:2023-10-16

我正在开发一款支持多点触控的Windows应用程序。我遵循了在这里找到的指南

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

但我有个问题。在某个时刻,有一个手指卡住了,这意味着我可以看到这个手指有一个TOUCHEVENT_DOWN,一个TOOCHEVENT_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("ERRORn");
        return DefWindowProc(hWnd, WM_TOUCH, wParam, lParam);
    }
}

触摸屏幕后,我在屏幕上没有实际的手指,而是有可变的手指!=0….

我很感激你的帮助。谢谢

附言:我申请了提议的修改,但我还是被卡住了,没有收到任何回复。

TOUCHEVENTF_MOVETOUCHEVENTF_UP可以组合在一个输入中,但您正在测试它们,就好像它们是互斥值一样。因此,如果一个"移动"和一个"上升"同时出现,你就会错过"上升"。

TOUCHINPUT结构的文档指定哪些标志在组合中是有意义的。