WINCE 触摸屏参数保存
由于我的系统上不支持HIVE注册表,所以每次触摸屏校正后参数无法保存,每次开机必须重新校正,参考网上的资料,我做了如下设想:
1写一个自己的触摸屏校正程序(在程序中还是调用系统的触摸屏校正程序,但把校正参数记录到文件中)。
2每次开机都自动运行一个校正参数加载程序,将参数写入注册表
OK
上面的两个程序写完的,基本达到我的设想,但是发现光写注册表,参数并不能起效。
继续找资料,查代码,我发现WINCE可以通过调用TouchPanelSetCalibration函数来将将参数传递给系统。
我对上面的第2步做了新的改进:
a 将之前的保存的参数从文件中读出
b 按TouchPanelSetCalibration函数的参数列表构建参数,函数原型如下:
VOID TouchPanelSetCalibration(
INT32 cCalibrationPoints,
INT32* pScreenXBuffer,
INT32* pScreenYBuffer,
INT32* pUncalXBuffer,
INT32* pUncalYBuffer
);
cCalibrationPoints 采样点数量(我的采样点是5个)
pScreenXBuffer 5次采样对应的屏幕横坐标
pScreenYBuffer 5次采样对应的屏幕纵坐标
pUncalXBuffer 5次采样对应的采样数据横坐标
pUncalYBuffer 5次采样对应的采样数据纵坐标
其中pUncalXBuffer和pUncalYBuffer的数据就是我之前保存在文件里的参数。
pScreenXBuffer和pScreenYBuffer通过屏幕截屏软件也可以得到。
c 调用TouchPanelSetCalibration,使之生效。
但在编写程序时发现问题,按MSDN的资料TouchPanelSetCalibration函数的头文件是:tchddi.h Library:Tchmain.lib,我将这两个文件都拷贝到项目目录中,并在Link选项中引用Tchmain.lib,但编译还是报错,为什么???
我又试着换一种方法,我发现TouchPanelSetCalibration函数在Touch.dll中,我试着
typedef BOOL (WINAPI *_TouchPanelSetCalibration)(int, int*, int*, int*, int*);
_TouchPanelSetCalibration TouchPanelSetCalibration = NULL;
HINSTANCE hinstance = LoadLibrary(_T("Touch.dll"));
TouchPanelSetCalibration = (_TouchPanelSetCalibration)GetProcAddress(hinstance , L"TouchPanelSetCalibration");
但调试发现LoadLibrary(_T("Touch.dll")); 加载失败,我无语。
在此请各位帮我看看,第一我的思路是否可行。
第二在应用程序中应该怎么调用TouchPanelSetCalibration函数。
谢谢
[解决办法]
开机时修改HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\touch下 的CalibrationData的值为校准后的值,可以起作用吗?
那你的思路可能重启后又恢复原值了