Есть ли способ "перевести" событие PT_TOUCH в событие WM_TOUCH?
Чтобы выяснить, почему я должен это сделать, пожалуйста, выделите красный текст ниже (не обязательно):
Причина этого вопроса в том, что я использую старый WINUSER.h в проекте, в котором я пытаюсь перехватить параметры msg из обратного вызова Window (эти два проверены и работают).
LRESULT CALLBACK WinProc(HWND hWnd, unsigned int msg, WPARAM wp, LPARAM lp)
switch (msg) {
case WM_MOUSEMOVE: {
doSomething;
break; }
case WM_TOUCH: {
doSomethingElse;
break; }
}
Я внедряю входные данные PT_TOUCH из другого проекта, который имеет более новую версию заголовка WINUSER.h, который уже имеет реализацию PT_TOUCH.(Я перевожу некоторые входные данные, прочитанные этим проектом, на сенсорные события).Так что это выглядит примерно так:
POINTER_TOUCH_INFO contact;
ZeroMemory(&contact, sizeof(POINTER_TOUCH_INFO));
InitializeTouchInjection(1, TOUCH_FEEDBACK_DEFAULT);
memset(&contact, 0, sizeof(POINTER_TOUCH_INFO));
contact.pointerInfo.pointerType = PT_TOUCH;
contact.pointerInfo.pointerId = 0;
contact.touchFlags = TOUCH_FLAG_NONE;
contact.touchMask = TOUCH_MASK_CONTACTAREA | TOUCH_MASK_ORIENTATION | TOUCH_MASK_PRESSURE;
contact.orientation = 90;
contact.pressure = channelPressForce;
contact.pointerInfo.ptPixelLocation.y = ((pressTouch.getTouchX(selected) * 0x7FFF) / (GetSystemMetrics(SM_CXSCREEN) - 1));
contact.pointerInfo.ptPixelLocation.x = ((pressTouch.getTouchY(selected) * 0x7FFF) / (GetSystemMetrics(SM_CXSCREEN) - 1));
// defining contact area (I have taken area of 8 x 8 pixel)
contact.rcContact.top = contact.pointerInfo.ptPixelLocation.y - 4;
contact.rcContact.bottom = contact.pointerInfo.ptPixelLocation.y + 4;
contact.rcContact.left = contact.pointerInfo.ptPixelLocation.x - 4;
contact.rcContact.right = contact.pointerInfo.ptPixelLocation.x + 4;
contact.pointerInfo.pointerFlags = POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT | POINTER_FLAG_DOWN;// | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT;
InjectTouchInput(1, &contact); // Injecting the touch down on screen
printf("SENT TOUCH DOWN EVENT \n");
Я считаю, что код работает правильно, так как вместо этого я попытался внедрить события MOUSE без проблем.(Даже несмотря на то, что я мог видеть результаты событий MOUSE на своем экране - как будто я щелкал - но по какой-то причине я не вижу результатов введенных событий TOUCH).
Некоторая ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
Простое обновление проекта с более новой версией заголовка, к сожалению, не вариант (AFAIK).
Это не обязательно должно быть событие WM_TOUCH, ничего страшного, если это событие WM_MOUSE, все что мне нужноэто поддержка одной дополнительной информации (которая есть у события мыши) и поддержка Multi-Touch - в этом случае я не уверен, что мышь справится с этим.