要弄清为什么我需要这样做,请在下面的文本中涂红色(不必要):
这个问题的原因是我在一个试图从Window回调中捕获msg参数的项目中使用了旧的WINUSER.h(这两个已经过测试并且可以正常工作)。
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事件也可以,我只需要支持一个额外的信息(具有鼠标事件)和多点触控支持-在这种情况下,我不确定鼠标可以处理。
答案 0 :(得分:0)
其中可能没有用。
按照iinspectable的建议,升级您的SDK,即可使用WM_TOUCH和PT_TOUCH。
如果升级SDK不起作用,请确保仔细检查项目中的预建库/错误的项目设置,因为升级SDK后解决了我的外部符号无法解析的问题。