WinCE觸摸校準界面的方法

歡迎加入Wince技術討論羣QQ#326444254

在實際應用中,經常需要定製WinCE系統的屏幕校準界面。最常見的需求就是根據系統的語言設置校準界面。要實現這個功能,大概有兩種方法,一是自己實現校準程序,完全取代WinCE系統的校準界面,第二種是修改WinCE系統自帶的校準界面。相比之下,第二種方法較爲簡便,而這部分的代碼是公開的,也有實現的可能。下面就簡單介紹一下修改WinCE自帶校準界面的方法。 

複製代碼
1.備份目錄C:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\CALIBRUI下的CalibrUi.cpp文件;
2.修改CalibrUi.cpp文件;
3.在VS2005的解決方案資源管理器中瀏覽到C:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\CALIBRUI,選中CALIBRUI,點擊右鍵,在彈出菜單中選擇Rebuild;
4.打開工程目錄下的Wince600\PLATFORM_ARMV4I\cesysgen\oak\target\ARMV4I\retail目錄,注意其中PLATFORM_ARMV4I隨BSP不同而異;
5.在VS2005的菜單中選擇“生成”——“Advanced Build Commands”——“Sysgen”菜單;
6.監視Wince600\PLATFORM_ARMV4I\cesysgen\oak\target\ARMV4I\retail目錄下的gwes.dll文件,如果gwes.dll被更新了,選擇“生成”——“取消”菜單,結束Sysgen,監視是人工的,做這一步主要是節省編譯的時間,而不必重新Sysgen整個工程;
7.將剛剛生成的gwes.dll文件拷貝至工程目錄下的RelDir\PLATFORM_ARMV4I_Release下,替換原來的gwes.dll文件,其中PLATFORM_ARMV4I_Release隨BSP不同而異;
8.點擊VS2005的“生成”——“Make Run-Time Image”菜單,使用新的gwes.dll,生成新的NK;
9.固化新生成的NK,並進入校準界面進行測試。
複製代碼

      下面以定製界面語言爲例,簡單介紹一下實現的關鍵代碼及步驟。首先將各個語言包編譯成單獨的DLL。在TouchCalibrateUI_Initialize()中根據系統語言加載特定的語言包,並替代系統默認加載的資源句柄,參考代碼如下。

1 hInstRes = LoadLibrary(szLanResFile);
2 if (hInstRes)
3 {
4     s_hinst = hInstRes;
5 }

    其中szLanResFile是根據系統語言選擇的校準界面的資源包。對於大多數語言來說,這就可以正常使用了。但對於日文、韓文和繁體中文來說,由於WinCE系統沒有自帶對應的字體,在修改後可能會出現一些亂碼,如□□,所以還需要添加有關字體的代碼。參考代碼如下。

複製代碼
 1 AddFontResource(szFontFile);
 2 
 3 LOGFONT lf;
 4 memset(&lf, 0sizeof(LOGFONT));
 5 wcscpy(lf.lfFaceName,szFaceName);// 初始化字體名稱
 6 lf.lfHeight = lfHeight;          // 設置字體的高度
 7 hFont = CreateFontIndirect(&lf); // 創建字體
 8 
 9 // 使用創建的字體
10 if (hFont)
11 {
12     hFontOld = (HFONT)SelectObject(hdc,hFont);
13 }
複製代碼

     除了動態修改語言之外,還可以修改背景顏色和字體的顏色。參考代碼如下。

複製代碼
 1 hBrush = CreateSolidBrush(dwBKColor);
 2 if (hBrush)
 3 {
 4     hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);
 5 }
 6 
 7 hPen = CreatePen(PS_SOLID,0,dwBKColor);
 8 if (hPen)
 9 {
10     hOldPen = (HPEN)SelectObject(hdc,hPen);
11 }
12 
13 SetBkMode(hdc,TRANSPARENT);
14 SetTextColor(hdc,dwTxtColor);
15 
16 ...
17 
18 if (hBrush)
19 {
20     SelectObject(hdc,hOldBrush);
21     DeleteObject(hBrush);
22 }
23 
24 if (hPen)
25 {
26     SelectObject(hdc,hOldPen);
27     DeleteObject(hPen);
28 } 
發佈了8 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章