一片冰心在玉壶

那时我们有梦,关于文学,关于爱情,关于穿越世界的旅行, 如今我们深夜饮酒,杯子碰到一起,都是梦破碎的声音. 交往都是初逢,爱情都在心里,往事都在梦中, 希望都带着注释,信仰都带着呻吟. 总有善意的光逃避现世的繁琐而寻找片刻的安宁, 也许,就是你凝视这里的眼睛

博客园 首页 联系 订阅 管理
===简单回答 ===
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 就好了。

posted on 2012-11-21 12:57  Sankye  阅读(569)  评论(0编辑  收藏  举报