系統(tǒng)字體獲得:
CCoeEnv::Static()->NormalFont()
CEikonEnv::Static()->AnnotationFont()
CEikonEnv::Static()->TitleFont()
CEikonEnv::Static()->LegendFont()
CEikonEnv::Static()->SymbolFont()
CEikonEnv::Static()->DenseFont()
全局變量:
#include <coemain.h>
LIB: cone.lib
引用實(shí)例,取全局AppUI:
CMainShellAppUi* appUi = static_cast<CMainShellAppUi*>(CCoeEnv::Static()->AppUi());
*****************************************************************************************
CONE分析初步
1.1 繼承關(guān)系
CEikonEnv --> CCoeEnv ,MApaAppStarter -->CActive, CBase.
這個類本身是不能用來被繼承的。主要的作用是給所有的 Uikon 的 controls 提供一個運(yùn)行的環(huán)境。這些環(huán)境包括很多項(xiàng),比如說環(huán)境字體,環(huán)境圖片,資源文件等等。所以 CEikonEnv 提供一系列的工具函數(shù),用于使用這些空間。每個 Uikon 的 appication 都有一個由 application framework 提供的 CEikonEnv 的實(shí)例,在 application 中可以用
CEikonEnv::Static() 或者 EikApplication 的宏 iEikonEnv 來使用這個 CEikonEnv 。
1.2 功能分析
CEikonEnv提供了一系列的功能。包括:
【Text的處理】
·取得當(dāng)前的環(huán)境(enviroment)字體:
const CFont* font = iEikonEnv->NormalFont();
· 取得當(dāng)前的環(huán)境(enviroment)標(biāo)準(zhǔn)符號字體:
const CFont* font = iEikonEnv-SymbolFont();
·類似的字體函數(shù):
AnnotationFont() / TitleFont() / LegendFont() /DenseFont() ;
【AlertWin的處理】
iEikonEnv->AlertWin(text);用于顯示一個alert windows。
【Resource readers 和 resource files】
·根據(jù) resourceId 把資源文件的內(nèi)容讀取到 TBuf 中:
CEikonEnv 提供了一系列的函數(shù)來讀取資源文件的內(nèi)容,基本的函數(shù)用法如下
TBuf<KAknExFormTitleBufLength> titleText( NULL );
iEikonEnv->ReadResource( titleText, resourceId );
· 根據(jù) resourceId 把資源文件的內(nèi)容讀取到一個resource reader中:
這個 resource reader 可以用于后續(xù)之用,這個 resource reader 被放置在cleanup stack上。
這個 resource reader 的主要作用在可以通過資源文件創(chuàng)建控件,如下:
CCoeControl::ConstructFromResourceL();
【Access(訪問函數(shù))】
·在這個范圍內(nèi)主要的函數(shù)是:AppUiFactory()。這個函數(shù)的主要作用是返回一個
MEikAppUiFactory 對象指針,This class defines a mixin interface to break
the dependency of the Uikon Application User Interface on controls。用法如下所示:
CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
這樣就獲得了 application 的 status spane,通過這個指針就可以訪問其他 sub status spane,如下:
CAknTitlePane* titlePane = (CAknTitlePane *)sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
這樣,就可以在運(yùn)行的時(shí)候動態(tài)更改status spane的內(nèi)容。
另外,如果appui繼承自CEikAppui,那么可以采用下面的方法:
CEikStatusPane *sp = ((CAknAppUi*)iEikonEnv->EikAppUi())->StatusPane();