MiniGUI里面支持屏幕校正,用户只需调用一个接口:
SetMouseCalibrationParameters( const POINT * src_pts, const POINT * dst_pts ),
注意:
在线程版,本接口在应用程序端调用, 而进程版在服务器程序端调用。
===详细回答===
校正原理:
当MiniGUI的输入设备为触摸屏设备时,从设备中读出的坐标值和实际点击的坐标 遵循 y=ax+b 关系式 (a、b 为系数, x为从设备中读出的坐标数据,y为实际的屏幕坐标)
所以得到那两个系数就可以正确的校正鼠标, Minigui里用一个函数接口就可以完成这些步骤:
SetMouseCalibrationParameters( const POINT * src_pts, const POINT * dst_pts ),
其中dst_pts 是五个点的屏幕坐标。
src_pts 为5个从设备中读出的坐标。
比如:
POINT src_pts [5] = {{5, 10}, {600, 20}, {620, 450}, {20, 470}, {310, 234}};
POINT dst_pts [5] = {{0, 0}, {639, 0}, {639, 479}, {0, 479}, {320, 240}};
利用这些数据,MiniGUI可以自动求出 a,b 系数,并且自动校正鼠标坐标。
实际应用:
1、线程版:
线程版只需参考mg-simple 里的 helloworld.c文件, 里面调用了SetMouseCalibrationParameters接口。
2、进程版:
进程版和线程版类似,不同的地方是SetMouseCalibrationParameters 接口在服务器端调用。
小技巧:
src_pts五个点的采样:
写一个主窗口的例子, 在 循环中填入下面的代码, 主窗口的风格不要标题栏,并且大小和屏幕的大小一样;
case MSG_LBUTTONDOWN:
printf("x:%d\n",lParam&0xffff);
printf("y:%d\n",(lParam&0xffff0000)>>16);
break;
点击dst_pts五个点的屏幕坐标, 然后把打印出来的坐标相应填写到src_pts 就好了。