構建可移植 brew™ 應用程式的方法
遵循以下原則,可使 brew 應用程式具有可移植性:
使用資源檔案
對每個目標裝置使用不同的 mif 檔案
參照螢幕座標定位控制項
使用適當顏色深度的影象
伸展影象
動態查詢特定影象或聲音型別的 處理程式
自定義選單樣式
1. 使用資源檔案 - 將資源與**分離
brew 應用程式可設計為在多種不同裝置上並以多種不同語言執行。 您無需為每台裝置和每種語言單獨建立應用程式,而只需使用資源編輯器建立多個資源檔案(.bar 檔案)- 每種裝置語言組合乙個。 以這種方式將資源與**分離將使您的 brew 應用程式可以跨裝置和語言進行移植。
您應該使用資源編輯器新增應用程式使用的所有字串、影象和對話方塊資源。 然後,將每個資源與乙個名稱相關聯,應用程式**中將使用該名稱。 有關如何生成資源 (.bar) 檔案的詳細資訊,請參閱 brew sdk™ 隨附的《資源編輯器指南》。
2. 對每個目標裝置使用不同的 mif 檔案
mif 檔案包含用於在可執行應用程式的選單中顯示應用程式的字串和影象。 因此,您應該為每個裝置語言組合建立不同的 mif 檔案。
3. 參照螢幕尺寸定位控制項 - 不要使用絕對畫素值作為螢幕座標
不同的目標裝置具有不同的螢幕尺寸和不同的字型高度、寬度。 以下 brew api 可用於獲得這些特性,在裝置上布置文字、影象和控制項時將用到這些 api:
• ishell_getdeviceinfo()4. 使用適當顏色深度的影象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, // 最大寬度
&pnfits); // 可容納的字元數
// 最大寬度
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)
對於不同的目標裝置,應使用不同的資源檔案。在這些檔案中,使用顏色深度適合裝置的影象。 如果您從外部網路獲得影象,則可以查閱裝置的顏色深度(包括螢幕尺寸)並使用這些值獲取合適的影象。
aeedeviceinfo di;5. 伸展影象int cx, cy, colordepth;
ishell_getdeviceinfo(pishell, &di);
cx = di.cxscreen; //裝置寬度(畫素)
cy = di.cyscreen; //裝置高度(畫素)
colordepth = di.ncolordepth; // 裝置的顏色深度
在 brew sdk 1.1 版中,可以使用 igraphics_stretchblt() 將位圖伸展到所需寬度和高度。 您可以比較螢幕尺寸(使用 ishell_getdeviceinfo)和影象尺寸 (iimage_getinfo),然後根據需要將位圖伸展到更加適當的大小。
igraphics_stretchblt(pigraphics,6. 動態查詢特定影象或聲音型別的處理程式xstart, //影象左上角的 x 和 y
ystart, // 座標
width, // 所需影象寬度
height, // 所需影象高度
sourcebmp //源位圖
rastercode)
確定影象/聲音型別的處理程式函式的 class id,然後
建立該 brew 類的例項。
// 查詢 bmp 影象處理程式的類 id7. 自定義選單樣式if ((cls = ishell_gethandler(pme->a.m_pishell, htype_viewer,
"image/bmp")) == 0)
break;
// 使用返回的類 id 建立影象處理程式的例項
ishell_createinstance(pme->a.m_pishell, cls, (void **)(&piimage));
if(piimage == null)
break;
使用標準選單樣式建立選單時,選單可能在不同的目標裝置上不一樣。 要保持您的選單有一致的外觀,您可以使用 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 應用程式的方法
1.使用資源檔案 將資源與 分離 brew 應用程式可設計為在多種不同裝置上並以多種不同語言執行。您無需為每台裝置和每種語言單獨建立應用程式,而只需使用資源編輯器建立多個資源檔案 bar 檔案 每種裝置語言組合乙個。以這種方式將資源與 分離將使您的 brew 應用程式可以跨裝置和語言進行移植。您應該...
構建Moblin應用程式(三)
大多數應用程式開發都可以使用熟悉的開發與除錯工具及環境在linux桌面上進行。開發應用程式時,必須關注應用程式的依賴項,並將其與moblin軟體平台中提供的依賴項進行比較。假定moblin平台已經提供了相關軟體包和其他依賴項,或者應用程式已經提供了這些內容,那麼應用程式只要略微修改便可執行。imag...
雲原生應用程式的構建
由於雲服務提供商 如aws 微軟和谷歌等 的激增,雲原生已經成為嵌入到現代應用程式開發中的乙個重要概念。簡而言之,雲原生應用程式就是為雲構建的應用程式。如何構建雲原生應用程式?雲原生應用程式是基於雲計算基礎設施設計的,雲計算本身的應用程式開發並不是圍繞內部伺服器 資料庫 連線等建立,而是依賴抽象出硬...