<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>
    以文本方式查看主題

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

    --  作者:wangxinxin
    --  發(fā)布時間:2010-11-26 10:04:49
    --  我的 ARM-WinCE 編程探索之旅(二)
    前幾天,我的HP 1715終于修好了,重新?lián)Q了塊屏,解決了觸屏失靈及自己拆機把背光弄沒的問題(在 pdafans 上詢問多日,毫無結(jié)果)。我的編程探索又可以繼續(xù)了。
    經(jīng)過多次測試,找到了使用 FPC(Free Pascal Compiler)加 SDL(SImple DirectMedia Layer)進行 ARM-WinCE 圖象編程的途徑(最終,建立過程中還是不得不借助于M$的開發(fā)工具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 的源碼,注釋掉連續(xù)的多個 *getenv 和 *putenv 二函數(shù),再用 ppcrossarm.exe 編譯 sdl.pas,得到libimpsdl.a、sdl.o、sdl.ppu三個文件,覆蓋原 \\lazarus\\fpc\\2.2.5\\units\\arm-wince\\sdl\\ 下的文件。

    至此,F(xiàn)PC+SDL的WinCE圖形編程環(huán)境構(gòu)建完成。

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

    下面是昨天晚上最后的程序源碼(在事件查詢循環(huán)上好像有點邏輯問題,有時候退不出程序,待修正):
    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.
    復(fù)制代碼
    接下來打算搞點有實際用處的程序,比如說一個文本閱讀器,使用24點陣字體;還要嘗試是否能將一些 sdl 輔助庫(比如:SDL_Mixer)編譯成 ARM-WinCE 可用的 DLL。


    主站蜘蛛池模板: 国产精品无码久久av| 日本在线视频www色| 啊~嗯~轻点~啊~用力村妇| 4hu四虎永久免在线视| 好硬好大好爽18漫画| 久久精品天天中文字幕人妻| 欧美日本免费一区二区三区| 又大又粗又爽的三级小视频| 韩国v欧美v亚洲v日本v| 国产高清在线a视频大全| 中文字幕在线一区二区三区| 日本高清二区视频久二区| 亚洲欧美国产va在线播放| 男人肌肌插女人肌肌| 国产亚洲精品第一综合| 2021国内精品久久久久精免费| 大香网伊人久久综合观看| 久久久久久久久久久久久久久| 日韩美女在线视频网站免费观看| 亚洲精品无码专区| 男女一区二区三区免费| 国产一二三区视频| 都流了这么多还嘴硬| 国产精品亚洲片在线观看不卡| www.人人干| 尤物视频在线看| 久久久无码精品亚洲日韩蜜臀浪潮| 月夜直播在线看片www| 亚洲精品在线不卡| 特级淫片aaaa**毛片| 君子温如玉po| 美女扒开粉嫩尿口漫画| 国产女人爽的流水毛片| 黄色网页免费观看| 国产精品成人不卡在线观看| av无码aV天天aV天天爽| 奇米影视77777| 中文字幕第三页| 挺进男同的屁股眼o漫画| 久久精品国产亚洲av忘忧草18| 晓青老师的丝袜系列txt下载|