以文本方式查看主題

-  曙海教育集團論壇  (http://m.scb-ycwb.com/bbs/index.asp)
--  WinCE應用開發  (http://m.scb-ycwb.com/bbs/list.asp?boardid=35)
----  我的 ARM-WinCE 編程探索之旅(二)  (http://m.scb-ycwb.com/bbs/dispbbs.asp?boardid=35&id=1807)

--  作者:wangxinxin
--  發布時間:2010-11-26 10:04:49
--  我的 ARM-WinCE 編程探索之旅(二)
前幾天,我的HP 1715終于修好了,重新換了塊屏,解決了觸屏失靈及自己拆機把背光弄沒的問題(在 pdafans 上詢問多日,毫無結果)。我的編程探索又可以繼續了。
經過多次測試,找到了使用 FPC(Free Pascal Compiler)加 SDL(SImple DirectMedia Layer)進行 ARM-WinCE 圖象編程的途徑(最終,建立過程中還是不得不借助于M$的開發工具eVC)。

1、從 http://www.libsdl.org/download-1.2.php 下載最新的 SDL 1.2.13 源碼,解壓其中 src 和 include 到 c:\\,解壓其中 visualce.zip 到 c:\\VisualCE。

2、下載并安裝eMbedded Visual C++ 4.0(同時附帶安裝了Platform SDK),運行,打開WorkSpace文件 c:\\VisualCE\\*.vcw,修改工程配置為 arm4,release,然后 Build SDL.DLL,生成 ARM-WinCE 下用的 SDL.DLL,約220K大小,將 SDL.DLL 拷入 PPC。

3、從 http://www.hu.freepascal.org/lazarus/ 下載并安裝最新的 Lazarus + fpc 2.2.5 win32 -> arm wince。修改 \\lazarus\\fpc\\2.2.5\\source\\packages\\sdl\\src\\sdl.pas 的源碼,注釋掉連續的多個 *getenv 和 *putenv 二函數,再用 ppcrossarm.exe 編譯 sdl.pas,得到libimpsdl.a、sdl.o、sdl.ppu三個文件,覆蓋原 \\lazarus\\fpc\\2.2.5\\units\\arm-wince\\sdl\\ 下的文件。

至此,FPC+SDL的WinCE圖形編程環境構建完成。

接下來,將前些日子根據 PGCC 示例用 FPC 改寫的一個簡單的桌面版 SDL 測試程序,重新用 ppcrossarm.exe 編譯,生成的EXE文件大小為82K,只導入了額外的 SDL.DLL(前面已經放入PPC),在PPC上運行通過。運行時會先出現 SDL 初始化的控制臺窗口,顯示一些視頻信息(桌面版的SDL也是如此,類似于dosbox的運行),其運行結果是每秒20次在全屏幕上顯示隨機大小、隨機顏色的方塊,按任意鍵或觸筆點擊退出。

下面是昨天晚上最后的程序源碼(在事件查詢循環上好像有點邏輯問題,有時候退不出程序,待修正):
  1. program Test;
  2. uses windows, sysutils, sdl;

  3. var
  4.         screen: PSDL_Surface;
  5.         event: TSDL_Event;
  6.         draw_count:int64=0;
  7.         done:boolean;
  8.         l,t:integer;

  9. procedure Draw_Box(screen:PSDL_Surface; x,y,w,h:dword; r,g,b:dword);
  10. var
  11.         p:PByte;
  12.         p2:PWord;
  13.         i,j:dword;
  14.         c:dword;
  15. begin
  16.         if SDL_MUSTLOCK(screen) then begin
  17.                 if SDL_LockSurface(screen) < 0 then exit;
  18.         end;

  19.         c := SDL_MapRGB(screen^.format, R, G, B);
  20.         assert (screen^.format^.BytesPerPixel=2);
  21.         p := screen^.pixels + y*screen^.pitch + x*screen^.format^.BytesPerPixel;
  22.         for j:=1 to h do begin
  23.                 p2:=PWord(p);
  24.                 for i:=1 to w do begin
  25.                         p2^:=c;
  26.                         inc(p2);
  27.                 end;
  28.                 inc(p,screen^.pitch);
  29.         end;

  30.         if SDL_MUSTLOCK(screen) then SDL_UnlockSurface(screen);
  31.         SDL_UpdateRect(screen, x, y, w, h);
  32. end;

  33. procedure HandleKey(key: TSDL_KeyboardEvent);
  34. begin
  35.         done:=true;
  36. end;

  37. //main at here
  38. begin
  39.         SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO);
  40.         screen := SDL_SetVideoMode(320, 240, 16, SDL_HWSurface);
  41.         SDL_WM_SetCaption(\'My SDL\',nil);

  42.         while not done do begin
  43.                 //Set_Pixel(screen,random(320),random(240),random(255),random(255),random(255));
  44.                 l:=random(320-40);
  45.                 t:=random(240-30);

  46.                 Draw_Box(Screen,l,t,random(320-40-l)+41,random(240-30-t)+31,random(255),random(255),random(255));
  47.                 inc(draw_count);
  48.                 while SDL_PollEvent(@event)<>0 do begin
  49.                               case event.type_ of
  50.                               SDL_MouseButtonDown,
  51.                                 SDL_QUITEV, SDL_KEYDOWN,SDL_KEYUP: done := true;
  52.                                       //handleKey(event.key);
  53.                         end;
  54.                 end;
  55.                 SDL_Delay(50);
  56.         end;

  57.         SDL_Quit();
  58. end.
復制代碼
接下來打算搞點有實際用處的程序,比如說一個文本閱讀器,使用24點陣字體;還要嘗試是否能將一些 sdl 輔助庫(比如:SDL_Mixer)編譯成 ARM-WinCE 可用的 DLL。


主站蜘蛛池模板: 久久久久亚洲AV无码麻豆| 亚洲日韩国产成网在线观看 | 亚洲人成777| 日韩精品专区在线影院重磅| 国产午夜亚洲精品不卡免下载| 久久久受www免费人成| 精品无码国产一区二区三区51安 | 午夜视频在线观看国产| jizzjlzzjlzz性欧美| 欧美日韩国产在线人成| 国产成人无码AⅤ片在线观看 | 亚洲成a人片在线观看www| 狠狠色香婷婷久久亚洲精品| 日本动漫h在线| 免费看男女下面日出水视频| 57pao国产成永久免费视频| 日韩日韩日韩日韩日韩| 午夜老司机永久免费看片| 97国产在线播放| 日韩在线观看中文字幕| 动漫人物一起差差差漫画免费漫画 | 亚洲精品国产福利一二区| 亚洲自国产拍揄拍| 无码人妻av一区二区三区蜜臀| 免费吃奶摸下激烈免费视频| 最色网在线观看| 我的娇妻acome| 亚洲欧美日韩精品久久亚洲区 | a毛片久久免费观看| 极品尤物一区二区三区| 啊用力太猛了啊好深视频免费| 99久久一香蕉国产线看观看| 日韩欧国产精品一区综合无码 | 国产女人高潮视频在线观看| 一区二区三区免费看| 欧美中文字幕在线| 国产jizz在线观看| 91精品观看91久久久久久| 日本漫画口工全彩内番漫画丝袜| 免费a级毛片在线播放| 成人福利在线视频|