Windows7触摸屏,VC获取手按下时鼠标位置的问题
时间:2011-12-14
来源:互联网
在windows7触摸屏上,用手按下时,收到的WM_TOUCH消息中的坐标总是鼠标之前的位置。也就是说开始鼠标在位置A,现在用手指点击位置B,但此时收到的消息中的坐标还是位置A的。
当手离开时,才同时收到WM_LBUTTONDOWN和WM_LBUTTONUP消息,此时鼠标位置才正确的位置B的坐标。不知道有没有人用VC6在windows上开发过触摸屏的程序,win7的确不大适合触摸屏开发。
请问如何在手按下时就获得当前的正确坐标,请教高手!
当手离开时,才同时收到WM_LBUTTONDOWN和WM_LBUTTONUP消息,此时鼠标位置才正确的位置B的坐标。不知道有没有人用VC6在windows上开发过触摸屏的程序,win7的确不大适合触摸屏开发。
请问如何在手按下时就获得当前的正确坐标,请教高手!
作者: coosney 发布时间: 2011-12-14
GetCursorPos()可以获取。。。
作者: shen_wei 发布时间: 2011-12-14
PreTranslateMessage用这个获取消息再GetCursorPos,转化为对应的位置咯
作者: afairycell 发布时间: 2011-12-14
GetCursorPos()试过的,也是之前鼠标的坐标,也就是说用手按下后,实际鼠标根本就没过来,当手up时,鼠标位置才过来。
就是不知道如何在手按下时就获得此时的坐标。
不过还是谢谢你们的回答。
就是不知道如何在手按下时就获得此时的坐标。
不过还是谢谢你们的回答。
作者: coosney 发布时间: 2011-12-15
你使用了RegisterTouchWindow API吗?
这是MS的例子:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in the global variable.
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
RegisterTouchWindow(hWnd, 0);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT OnTouch(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
if (GetTouchInputInfo((HTOUCHINPUT)lParam,
cInputs,
pInputs,
sizeof(TOUCHINPUT)))
{
// process pInputs
if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
{
// error handling
}
}
else
{
// GetLastError() and error handling
}
delete [] pInputs;
}
else
{
// error handling, presumably out of memory
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
这是MS的例子:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in the global variable.
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
RegisterTouchWindow(hWnd, 0);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT OnTouch(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
if (GetTouchInputInfo((HTOUCHINPUT)lParam,
cInputs,
pInputs,
sizeof(TOUCHINPUT)))
{
// process pInputs
if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
{
// error handling
}
}
else
{
// GetLastError() and error handling
}
delete [] pInputs;
}
else
{
// error handling, presumably out of memory
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
作者: baby393 发布时间: 2011-12-15
或许你没有正确理解TOUCHINPUT结构。
作者: baby393 发布时间: 2011-12-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28