您的位置:首页 > 移动开发

详解 CEikonEnv::Static() iEikonEnv EikAppUi() AppUi() CAknViewAppUi CEikApplication CCoeEnv

2009-11-13 17:26 267 查看
详解CEikonEnv::Static()iEikonEnvEikAppUi()AppUi()CAknViewAppUiCEikApplicationCCoeEnv

请解释以下语句:
1
#defineiAvkonViewAppUi((CAknViewAppUi*)CEikonEnv::Static()->EikAppUi()) inaknviewappui.h 
先用CEikonEnv::Static()得到一个指向CEikonEnv实例的指针,再用EikAppUi()得到一个指向CEikAppUi的指针,然后转换为CAknViewAppUi指针。
CEikAppUi 和 CAknViewAppUi 的继承关系可以参见后面的关系清单。

iAvkonViewAppUi->ProcessMessageL(TUid::Uid(KUidApaMessageSwitchOpenFileValue),aParams);inownercppfile

2.
#defineiEikonEnv(STATIC_CAST(CEikonEnv*,iCoeEnv))
#defineSTATIC_CAST(type,exp)(static_cast<type>(exp))
转换iCoeEnv指针 为 指向CEikonEnv 实例的指针。

iEikonEnv与CEikonEnv::Static()等价。
iCoeEnvwasdefinedinclassCEikApplication.
iCoeEnv是这样被定义的:
protected:
CCoeEnv*iCoeEnv;
classCCoeEnv:publicCActive,publicMObjectProvider
classCActive:publicCBase

CCoeEnv 介绍:
CCoeEnvprovidesanactiveenvironmentforcreatingcontrols.Itimplements
activeobjectsandanactivescheduler,whichprovideaccesstothewindow
server,simplifyingtheAPIforapplicationprograms.Italsoprovidesutility
functionsthatareusefultomanyapplications.

CEikApplication的详细介绍见后。

3.
CCamAppUi*appUi=static_cast<CCamAppUi*>(CEikonEnv::Static()->AppUi());
CCamAppUi*appUi=static_cast<CCamAppUi*>(iEikonEnv->AppUi());
CCamAppUiisowner*Ui.cppfile.
先用CEikonEnv::Static()得到一个指向CEikonEnv实例的指针,再用AppUi()得到一个指向(PointertotheappUIownedbytheapplication.)的指针,然后转换为CCamAppUi的指针。
CCamAppUi 是我们自己的class.

解释如下所述:
classCEikonEnv:publicCCoeEnv;
Description
Anenvironmentforcreatingcontrolsandutilityfunctionsformanipulatingthem.
EveryGUIapplicationisprovidedwithaninstanceofCEikonEnvbytheframework,whichcanbeaccessedthrougheitherCEikonEnv::Static()ortheiEikonEnvmacroofCEikApplication.
所以,不要去管CEikonEnv和其他类的关系,我们只能用CEikonEnv::Static()ortheiEikonEnv 来得到一个CEikonEnv 实例,然后就调用CEikonEnv 中的方法。

通过CEikonEnv::Static() 和 iEikonEnv,为什么就可以得到一个CEikonEnv实例呢?
答:
GLDEF_CTIntE32Main()
{
returnEikStart::RunApplication(NewApplication);
}
RunApplication会创建一个CEikonEnv对象。

CEikonEnv中的静态方法可以直接调用,不需要先得到一个实例。如:
CEikonEnv::InfoWinL(_L("note:"),_L("text"));


1:
EikAppUi()-DefinedinCEikonEnv: (CEikonEnv::Static()->EikAppUi())
inlineCEikAppUi*EikAppUi()const;
Description
GetstheapplicationUIoftheapplicationusingthisCEikonEnv.

2:

iEikonEnv:Location:EIKDEF.H
iEikonEnv(STATIC_CAST(CEikonEnv*,iCoeEnv))

Description
MacrotoalloweasyaccesstotheCEikonEnvinstance.
iCoeEnvwasdefinedinclassCEikApplication.
iCoeEnv是ClassCEikApplication的保护数据成员

classCEikApplication:publicCApaApplication;
Description
ThebaseofallUikonapplications.
CEikApplicationbuildsonCApaApplication,providingabasisforapplicationsworkingwithintheframeworkprovidedbyUikon.Italsocontainsaninterfacetotheresourcefileandthedocument.
EachUikonapplicationclassisderivedfromCEikApplication.ApplicationwritersmustprovideatleastanimplementationofthepurevirtualfunctionCreateDocumentL().
Theapplication'sresourcefilecanbechangedfromthedefaultbyoverridingResourceFileName().
Derivation
CBase-Baseclassforallclassestobeinstantiatedontheheap
  CApaApplication-Definesthebasicbehaviourforapplications
    CEikApplication-ThebaseofallUikonapplications

3:
AppUi()-InheritedfromCCoeEnv:(CEikonEnv::Static()->AppUi())
inlineCCoeAppUi*AppUi()const;
Description
GetstheapplicationUIownedbythisapplication.

ReturnvalueCCoeAppUi*

PointertotheappUIownedbytheapplication.
AppUi继承关系:CShowContactAppUiisownerclass.
classCShowContactAppUi:publicCAknViewAppUi
classCAknViewAppUi:publicCAknAppUi
classCAknAppUi:publicCAknAppUiBase,MEikStatusPaneObserver,publicMCoeViewDeactivationObserver,publicMAknTouchPaneObserver
classCAknAppUiBase:publicCEikAppUi
classCEikAppUi:publicCCoeAppUi,publicMEikMenuObserver,publicMCoeMessageObserver ,publicMObjectProvider
classCCoeAppUi:publicCBase

Application继承关系:CShowContactApplicationisownerclass.
classCShowContactApplication:publicCAknApplication
classCAknApplication:publicCEikApplication
classCEikApplication:publicCApaApplication
classCApaApplication:publicCBase
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: