问题描述:怎样在定制系统时,把Calibrui Module克隆出来。再根据软件需求,来更改触摸屏校准时的UI及控制操作等。
先说方法吧。WinCE的文档中的“How to Replace the Calibrui Module”有说明怎么做的步骤。先在PB中把Calibrui Module克隆,便会生成CalibrUi[gwe2 clone]这个Project。我们要做的修改都在这个Project中。修改完后,点Build OS中的Sysgen。好了,搞定了。
方法很简单吧。但是好事多摩嘛,在做的过程中会碰到好多问题。我把我遇到的问题及解决方法写下来了。可供参考。
首先,从迷茫中寻求解决方案。刚碰到触摸屏校准问题,一头雾水。不知道怎么做。
我本来想应该是驱动做好了Calibrate这个功能,再引出一个接口,应用层来控制UI并调驱动给的接口来启动Calibrate。我忽略了OS的存在。构架的思想还是不好。正确的应该是OS中来封装一个Calibrate模块,引出Calibrui Module,做为UI接口,让开发人员可以在此做动作,更改UI及控制。这样真的挺好。对于移植性,和模块化等都起作用。
迷茫无助之际,上网搜解决办法。网上基本上都只提到直接用TouchCalibrate这个函数便行。可是这个函数只能启动OS中的Calibrate,而此时便想,既然这个函数可以调起Calibrate,那应该Calibrate的UI控制也是这个函数控制的吧。这个想法是对了。于是乎,想找出TouchCalibrate()的代码来看,改下它所控制的UI。真可悲,找不到TouchCalibrate()的代码。不知道是我没找到,还是微软没开放此代码。如果是的话,那就难怪大家会说微软不厚道。为怎么会这么想呢?因为郁闷呀,费了好大心思,结果微软告诉你,哈哈,你想要的答案我不跟你说。困惑之中,亮光惊现。“书中自有颜如玉”,女神还是从文档中走出来了。找到了“How to Replace the Calibrui Module”。得到的经验:碰到问题还是老实的,认真地看文档,从文档中找着的方案应该是最可能解决你的问题的。网上搜来的方案只能参考,一定得弄懂它解决的是什么问题。可惜的是,网上大多文章只是说自已的方法,而不说此方法能搞定什么问题。
其次,有了“How to Replace the Calibrui Module”,便要验证其可行性。把UI的提示信息改成了中文便来做测试。此时便是Build OS->Sysgen时碰到的问题了。这是最费时间的了。Sysgen一次要十几分钟呀。人在等待时,时间便变老了,走得慢了。Sysgen Debug通不过,此问题还没解决,不知道为什么。所以不能单步调试了,只能Sysgen Release来试。Sysgen Release通过了,但是校准时,还是出不来中文。郁闷,女神不灵呀。组长解决了此问题,让女神成真神。他查到Sysgen时的错误信息里面有找不到CalibrUi_clone.rc。于是,手动将CalibrUi_clone.res copy一份到%WINCE500%\PBWorkspaces\%OS _DesignName%\CalibrUi\obj\ARMV4I\retail的0409和0804文件夹中。(我定制的OS语言选了中,英文。0804,0409分别代表中,英文)。好了,Sysgen通过了,校准中文提示也出来了。经验就可省时间,就是财富。组长调程序,查错的能力值得我学。我第一次用PB,碰到错误就傻眼了,不知道怎么调。再提醒一点,如果改了CalibrUi_clone.rc,要再次手动将上面两文件夹中的CalibrUi_clone.rc替换。还有改了CalibrUi[gwe2 clone]后。要将%WINCE500%\PBWorkspaces\%OS _DesignName%\RelDir\smdk2443_ARMV4I_Release文件夹清空,到少要将gwes.exe删除。要不再次Sysgen时,gwes.exe不会更新。也就是说你看不到你想要的结果。可能你要说我得把clean before building勾上。告诉你,我确实勾上了。这应该是微软的bug吧。可是组长说我们用的PB没有打过补丁。不知道此问题现在是否还有广泛性。
最后,看到了光明大道之后。便是沿着此方法根据需求改UI了。我主要改了CalibrUi.cpp和CalibrUi_clone.rc。CalibrUi.cpp主要函数的功能我介绍下。要改它,肯定要先清楚它是做什么的。
TouchCalibrateUI_Initialize做初始化。保存两个全局变量。
TouchCalibrateUI_DrawMainScreen打印校准操作说明信息。
TouchCalibrateUI_HandleUserInputMessage捕捉屏幕事件并做相应操作。
TouchCalibrateUI_DrawConfirmationScreen打印新校准测定之后,提示是否保存。
TouchCalibrateUI_WaitForConfirmation等待用户决定并打印相关信息。
这面五个函数是按被调用启动的先顺序列出来的。
TouchCalibrateUI_DrawMainScreen和TouchCalibrateUI_DrawConfirmationScreen都调用了TouchCalibrateDrawScreenText。TouchCalibrateDrawScreenText是用来把字符串打到屏幕上。我主要在这个函数中做了相应的更改。如改屏幕背景色,改打印出来的字的颜色等。
从此困扰已久的屏幕校准问题终于解决了。

posted on 2010-05-31 10:25  xilentz  阅读(468)  评论(0编辑  收藏  举报