c++ - 未收到 Windows 多点触控 TOUCHEVENTF_UP

标签 c++ windows winapi wm-touch

我正在开发支持多点触控的 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....

我会很感激一些帮助。谢谢。

附言我应用了建议的更改,但我的手指仍然卡住,没有收到手指。

最佳答案

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

docs for the TOUCHINPUT structure指定哪些标志组合起来有意义。

关于c++ - 未收到 Windows 多点触控 TOUCHEVENTF_UP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20407700/

相关文章:

c++ - 从打开文件对话框获取文件夹

c++ - 从dll调用函数到exe C++

c++ - 通过 std::bind 传递右值

c - 禁用适配器时 NdisFSendNetBufferLists 导致 BSoD

c# - C#将Windows窗体应用程序添加到控制台应用程序

c++ - PeekMessage问题

c++ - 如何按条件打印位图?

c++ - 查找重叠 1 位的计数

c++ - 如何在 visual studio 中有条件地链接静态库

java - 每次在 Windows 中启动应用程序时如何记录?