Symbian之源码分析之EikEnv.cpp
2010-07-04 15:42:00 来源:WEB开发网SetAppReady();
//创建结束
}
void CEikDocument::PrepareToEditL()
{
//CYourDocument类需要重载CreateAppUiL函数并创建AppUi。
iAppUi=CreateAppUiL();
iAppUi->SetDocument(this);
iAppUi->SetEmbeddedDocInfo(NULL,NULL);
//CYourAppUi会重载ConstructL函数
//必须首先调用CEikAppUi::BaseConstructL()
iAppUi->ConstructL();
}
void CEikAppUi::BaseConstructL(TInt aAppUiFlags)
{
//第一次设置AppUi时返回的值为NULL
iContainerAppUi = static_cast(iCoeEnv->SetAppUi(this));
//这里会创建控件栈CCoeControlStack
//以及创建CCoeViewManager
CCoeAppUi::ConstructL(iContainerAppUi);
//初始化DebugKeys以及AlertWin
if (!iContainerAppUi)
iEikonEnv->ControlStackReadyL();
//加载资源文件,EIK_APP_INFO资源里定义的东东应该是在这里被加载的
if (!(aAppUiFlags&(ENoAppResourceFile|ENonStandardResourceFile)))
ReadAppInfoResourceL();
else if (!(aAppUiFlags&ENoScreenFurniture))
CreateResourceIndependentFurnitureL();
iCoeEnv->AddMessageObserverL(*this);
iEikonEnv->PostAppUiInitializeL();
iCoeEnv->RootWin().EnableScreenChangeEvents();
}
这样初始化的过程就结束了,里面还有一堆东西没有看懂,不过重要的几个步骤上面都在了。
三、运行应用程序
env->Execute()调用的是CCoeEnv::Execute():
void CCoeEnv::Execute()
{
iEnvFlags|=ESchedulerIsRunning;
//运行活动调度器,里面是个While循环
//直到程序退出才会返回
TRAPD(exitCondition,CActiveScheduler::Start());
//看是否正常退出或者是Leave导致的退出
__ASSERT_ALWAYS((exitCondition==KLeaveExit) || (exitCondition==KErrNone), Panic(ECoePanicLeaveWithoutTrap));
更多精彩
赞助商链接