構建可移植 BREW 應用程式的方法

2021-04-03 02:34:05 字數 4490 閱讀 5336

1. 使用資源檔案 - 將資源與**分離

brew 應用程式可設計為在多種不同裝置上並以多種不同語言執行。 您無需為每台裝置和每種語言單獨建立應用程式,而只需使用資源編輯器建立多個資源檔案(.bar 檔案)- 每種裝置語言組合乙個。 以這種方式將資源與**分離將使您的 brew 應用程式可以跨裝置和語言進行移植。

您應該使用資源編輯器新增應用程式使用的所有字串、影象和對話方塊資源。 然後,將每個資源與乙個名稱相關聯,應用程式**中將使用該名稱。 有關如何生成資源 (.bar) 檔案的詳細資訊,請參閱 brew sdk™ 隨附的《資源編輯器指南》。

2. 對每個目標裝置使用不同的 mif 檔案

mif 檔案包含用於在可執行應用程式的選單中顯示應用程式的字串和影象。 因此,您應該為每個裝置語言組合建立不同的 mif 檔案。

3. 參照螢幕尺寸定位控制項 - 避免將絕對畫素值用作螢幕座標

不同的目標裝置具有不同的螢幕尺寸和不同的字型高度、寬度。 以下 brew api 可用於獲得這些特性,在裝置上布置文字、影象和控制項時將用到這些 api:

• ishell_getdeviceinfo()

ishell_getdeviceinfo 用於確定執行應用程式的

裝置的螢幕尺寸。

aeedeviceinfo di;

int cx, cy;

ishell_getdeviceinfo(pishell, &di);

cx = di.cxscreen; //用畫素表示的裝備寬度

cy = di.cyscreen; //用畫素表示的裝備高度

• idisplay_getfontmetrics()

idisplay_getfontmetrics() 用於查詢特定

字型的字元高度。

int fontheight;

fontheight = idisplay_getfontmetrics(pme->a.m_pidisplay,

aee_font_bold, null,

null);

• idisplay_measuretext()

idisplay_measuretext() 用於在使用指定字型進行繪製時

測量給定字串的畫素寬度。

int stringwidth = idisplay_measuretext(pme->a.m_pidisplay,

aee_font_normal,

textstring);

• idisplay_measuretextex()

idisplay_measuretextex() 用於在給定顯示字串

的最大畫素寬度和字型的情況下,

確定可以顯示的輸入文字字串的字元數。

pixelwidth = idisplay_measuretextex(pme->m_pidisplay,

aee_font_bold,

(aechar *) textstring, // 文字字串

-1,di.cxscreen, // maxwidth

&pnfits); // 可以放得下的字元數

// maxwidth

pixelwidth 含有輸入文字字串的畫素寬度。 pnfits

含有輸入文字字串字元數,這些字元數能夠

在裝備的一行中放得下。

• iimage_getinfo()

iimage_getinfo() 用於獲取影象尺寸。

aeeimageinfo imginfo;

int cx,cy;

iimage_getinfo(piimage, &imginfo);

cx = imginfo.cx; //影象寬度

cy = imginfo.cy; //影象高度

使用以上 api,您無需對畫素值進行硬編碼就可以

定位螢幕上的元素。 例如:

要繪製跨多行的文字:

// 獲取裝備資訊

ishell_getdeviceinfo(pme->m_pishell,&di);

// 獲取字元量度資訊

charheight = idisplay_getfontmetrics (pme->m_pidisplay,

aee_font_normal, &pnascent, &pndescent);

// 轉換為寬字串 (unicode)

str_to_wstr ((char *)displaystr, widestr, sizeof (widestr));

// psz 保留從字串緩衝區寫的點的蹤跡

// 用於字串無法全部放到一行而需要接到

// 下一行時。

psz = widestr;

// 需要計算總字串長度以決定是否需要

// 接到下一行。

totalch = strlen ((char *)widestr);

// 在數行顯示文字字串,如果字串無法

顯示在//單一行時。

while ((totalch > 0) && (*psz != null))

} 要在螢幕中心顯示影象:

// 獲取裝備座標

ishell_getdeviceinfo(pme->a.m_pishell, &dinfo);

// 從資源檔案載入影象

piimage = ishell_loadresimage(pme->a.m_pishell, szresfile,

idb_browser_icon);

if (piimage)

4. 使用適當顏色深度的影象

對於不同的目標裝置,應使用不同的資源檔案。在這些檔案中,使用顏色深度適合裝置的影象。 如果您從外部網路獲得影象,則可以查閱裝置的顏色深度(包括螢幕尺寸)並使用這些值獲取合適的影象。

aeedeviceinfo di;

int cx, cy, colordepth;

ishell_getdeviceinfo(pishell, &di);

cx = di.cxscreen; //用畫素表示的寬度

cy = di.cyscreen; //用畫素表示的高度

colordepth = di.ncolordepth; // 裝備的顏色深度

5. 伸展影象

在 brew sdk 1.1 版中,可以使用 igraphics_stretchblt() 將位圖伸展到所需寬度和高度。 您可以比較螢幕尺寸(使用 ishell_getdeviceinfo)和影象尺寸 (iimage_getinfo),然後根據需要將位圖伸展到更加適當的大小。

igraphics_stretchblt(pigraphics,

xstart, //影象的左上角 x & y 座標

ystart,

width, // 想要的影象寬度

height, //想要的影象高度

sourcebmp //源位圖

rastercode)

6. 動態查詢特定影象或聲音型別的處理程式

確定影象/聲音型別的處理程式函式的 class id,然後

建立該 brew 類的例項。

// 找出用於 bmp 影象的處理程式的 class id

if ((cls = ishell_gethandler(pme->a.m_pishell, htype_viewer,

"image/bmp")) == 0)

break;

// 用返回的 class id 建立影象處理程式的例項

ishell_createinstance(pme->a.m_pishell, cls, (void **)(&piimage));

if(piimage == null)

break;

7. 自定義選單樣式

使用標準選單樣式建立選單時,選單可能在不同的目標裝置上不一樣。 要保持您的選單有一致的外觀,您可以使用 imenu_setstyle() 自定義選單樣式(專案的邊框型別、專案內 x 方向的填充、專案內 y 方向的填充、專案內繪製影象的光柵操作)。

aeeitemstyle si, ni;

// 所選選單項目的專案樣式

si.ft = aee_ft_tab_top_sel; // 專案的幀型別

si.xoffset = 8; //專案內部的x 填補 (不包括幀大小)

si.yoffset = 8; //專案內部的y 填補 (不包括幀大小)

si.roimage = aee_ro_copy; // 繪製影象的光柵操作在

// 專案內部

// 一般選單項目的專案樣式

ni.ft = aee_ft_tab_top; // 專案的幀型別

ni.xoffset = 8; //專案內部的x 填補 (不包括幀大小)

ni.yoffset = 8; //專案內部的y 填補 (不包括幀大小)

ni.roimage = aee_ro_copy; //繪製影象的光柵操作在

專案// 內部

// 現在把專案樣式設定為建立的樣式

imenuctl_setstyle(pme->m_pstdmenu, &ni, &si);

構建可移植 BREW 應用程式的方法

構建可移植 brew 應用程式的方法 遵循以下原則,可使 brew 應用程式具有可移植性 使用資源檔案 對每個目標裝置使用不同的 mif 檔案 參照螢幕座標定位控制項 使用適當顏色深度的影象 伸展影象 動態查詢特定影象或聲音型別的 處理程式 自定義選單樣式 1.使用資源檔案 將資源與 分離 brew...

構建Moblin應用程式(三)

大多數應用程式開發都可以使用熟悉的開發與除錯工具及環境在linux桌面上進行。開發應用程式時,必須關注應用程式的依賴項,並將其與moblin軟體平台中提供的依賴項進行比較。假定moblin平台已經提供了相關軟體包和其他依賴項,或者應用程式已經提供了這些內容,那麼應用程式只要略微修改便可執行。imag...

雲原生應用程式的構建

由於雲服務提供商 如aws 微軟和谷歌等 的激增,雲原生已經成為嵌入到現代應用程式開發中的乙個重要概念。簡而言之,雲原生應用程式就是為雲構建的應用程式。如何構建雲原生應用程式?雲原生應用程式是基於雲計算基礎設施設計的,雲計算本身的應用程式開發並不是圍繞內部伺服器 資料庫 連線等建立,而是依賴抽象出硬...