Мультитач Windows TOUCHEVENTF_UP не получен

Я работаю над приложением для 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 ….

Буду признателен за помощь. Благодарю.

Постскриптум Я применил предложенное изменение, но я все еще застрял пальцы, не получил палец вверх.

0

Решение

TOUCHEVENTF_MOVE а также TOUCHEVENTF_UP могут быть объединены в одном входе, но вы проверяете их, как будто они являются исключительными значениями. Поэтому, если «движение» и «вверх» идут одновременно, вы пропустите «вверх».

документы для TOUCHINPUT состав укажите, какие флаги имеют смысл в комбинации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]