详解 CEikonEnv::Static() iEikonEnv EikAppUi() AppUi() CAknViewAppUi CEikApplication CCoeEnv
请解释以下语句:
1.
#define iAvkonViewAppUi ((CAknViewAppUi*)CEikonEnv::Static()->EikAppUi()) in aknviewappui.h
先用CEikonEnv::Static()得到一个指向CEikonEnv实例的指针,再用EikAppUi()得到一个指向CEikAppUi的指针,然后转换为CAknViewAppUi指针。
CEikAppUi 和 CAknViewAppUi 的继承关系可以参见后面的关系清单。
iAvkonViewAppUi->ProcessMessageL( TUid::Uid(KUidApaMessageSwitchOpenFileValue ), aParams); in owner cpp file
2.
#define iEikonEnv (STATIC_CAST(CEikonEnv*,iCoeEnv))
#define STATIC_CAST(type,exp) (static_cast<type>(exp))
转换iCoeEnv指针 为 指向CEikonEnv 实例的指针。
iEikonEnv 与CEikonEnv::Static()等价。
iCoeEnv was defined in class CEikApplication.
iCoeEnv 是这样被定义的:
protected:
CCoeEnv* iCoeEnv;
class CCoeEnv : public CActive, public MObjectProvider
class CActive : public CBase
CCoeEnv 介绍:
CCoeEnv provides an active environment for creating controls. It implements
active objects and an active scheduler, which provide access to the window
server, simplifying the API for application programs. It also provides utility
functions that are useful to many applications.
CEikApplication 的详细介绍见后。
3.
CCamAppUi* appUi = static_cast<CCamAppUi*>( CEikonEnv::Static()->AppUi() );
CCamAppUi* appUi = static_cast<CCamAppUi*>( iEikonEnv->AppUi() );
CCamAppUi is owner *Ui.cpp file.
先用CEikonEnv::Static()得到一个指向CEikonEnv实例的指针,再用AppUi()得到一个指向(Pointer to the app UI owned by the application.)的指针,然后转换为CCamAppUi的指针。
CCamAppUi 是我们自己的class.
解释如下所述:
class CEikonEnv : public CCoeEnv;
Description
An environment for creating controls and utility functions for manipulating them.
Every GUI application is provided with an instance of CEikonEnv by the framework, which can be accessed through either CEikonEnv::Static() or the iEikonEnv macro of CEikApplication.
所以,不要去管CEikonEnv和其他类的关系,我们只能用CEikonEnv::Static() or the iEikonEnv 来得到一个CEikonEnv 实例,然后就调用CEikonEnv 中的方法。
通过CEikonEnv::Static() 和 iEikonEnv,为什么就可以得到一个CEikonEnv实例呢?
答:
GLDEF_C TInt E32Main()
{
return EikStart::RunApplication( NewApplication );
}
RunApplication会创建一个CEikonEnv对象。
CEikonEnv中的静态方法可以直接调用,不需要先得到一个实例。如:
CEikonEnv::InfoWinL(_L("note:"), _L("text"));
1:
EikAppUi()-Defined in CEikonEnv: (CEikonEnv::Static()->EikAppUi())
inline CEikAppUi *EikAppUi() const;
Description
Gets the application UI of the application using this CEikonEnv.
2:
iEikonEnv: Location: EIKDEF.H
iEikonEnv (STATIC_CAST(CEikonEnv*,iCoeEnv))
Description
Macro to allow easy access to the CEikonEnv instance.
iCoeEnv was defined in class CEikApplication.
iCoeEnv 是Class CEikApplication的保护数据成员
class CEikApplication : public CApaApplication;
Description
The base of all Uikon applications.
CEikApplication builds on CApaApplication, providing a basis for applications working within the framework provided by Uikon. It also contains an interface to the resource file and the document.
Each Uikon application class is derived from CEikApplication. Application writers must provide at least an implementation of the pure virtual function CreateDocumentL().
The application's resource file can be changed from the default by overriding ResourceFileName().
Derivation
CBase - Base class for all classes to be instantiated on the heap
CApaApplication - Defines the basic behaviour for applications
CEikApplication - The base of all Uikon applications
3:
AppUi() - Inherited from CCoeEnv: (CEikonEnv::Static()->AppUi())
inline CCoeAppUi *AppUi() const;
Description
Gets the application UI owned by this application.
|
AppUi 继承关系:CShowContactAppUi is owner class.
class CShowContactAppUi : public CAknViewAppUi
class CAknViewAppUi : public CAknAppUi
class CAknAppUi : public CAknAppUiBase, MEikStatusPaneObserver, public MCoeViewDeactivationObserver, public MAknTouchPaneObserver
class CAknAppUiBase : public CEikAppUi
class CEikAppUi : public CCoeAppUi, public MEikMenuObserver, public MCoeMessageObserver , public MObjectProvider
class CCoeAppUi : public CBase
Application继承关系:CShowContactApplication is owner class.
class CShowContactApplication : public CAknApplication
class CAknApplication : public CEikApplication
class CEikApplication : public CApaApplication
class CApaApplication : public CBase