Q:一个经典的helloworld程序需要几个文件?

 

l        一个安装文件bld.inf,这个文件内容很简单,只给出了要编译的工程文件,当然如果有多个工程文件要编译,可以直接写到后面如x.mmp

PRJ_MMPFILES

HelloworldApp.mmp

x.mmp

l        一个工程文件helloworldApp.mmp,这个文件列出了工程需要的所有文件和用到的库,还有UID等。

TARGET           HelloworldApp.app

TARGETTYPE      app

TARGETPATH      \system\apps\helloworldapp

UID                0x100039CE 0x0a3c7184   

USERINCLUDE     ..\inc

SYSTEMINCLUDE   \epoc32\include

 

SOURCEPATH      ..\src

SOURCE           HelloworldApp.cpp

 

SOURCEPATH      ..\data

RESOURCE        HelloworldApp.rss

RESOURCE        HelloworldApp_caption.rss

LANG     SC

 

LIBRARY euser.lib apparc.lib cone.lib eikcore.lib eikcoctl.lib avkon.lib

 

AIF HelloworldApp.aif ..\aif HelloworldAppaif.rss c8 context_pane_icon.bmp context_pane_icon_mask.bmp list_icon.bmp list_icon_mask.bmp

l        一个UID的文件HelloworldApp.uid.cpp,该文件包含了一个程序的uid

l        一个程序的资源文件helloworldApp.rss, HelloworldApp_caption.rss,这两个文件包含了程序的大多数文本资源。

l        一个程序的头文件HelloworldApp.h和一个程序的源文件HelloworldApp.cpp

l        一个包文件HelloworldApp.pkg

l        若干个图片文件在aif目录中。

 

一个经典的HelloworldApp程序有四个类,并且采用了MVC模式来构建程序,这四个类分别是应用程序类CHelloworldAppApplication,文档类CHelloworldAppDocument,程序界面控制类CHelloworldAppUi和程序界面视图类CHelloworldAppView

一般情况下,一个经典的HelloworldApp程序包含的头文件有:

#include <eikapp.h>             // CEikApplication

#include <eikdoc.h>             // CEikDocument

#include <coecntrl.h>           // CCoeControl

#include <uikon.hrh>            // Command codes

#include <eikenv.h>             // CEikonEnv

#include <eiklabel.h>           // CEikLabel

#include <aknappui.h>           // CAknAppUi

#include <aknnotewrappers.h>    // CAknInformationNote

 

CHelloworldAppApplication继承自CEikApplication,

CHelloworldAppDocument继承自CEikDocument,

CHelloworldAppView继承自CCoeControl,并使用了CEikLabel类,

CHellowroldAppUi继承自CAknAppUi

uikon.hrh文件包含了控件界面的命令映射,aknnotewrappers.h文件包含了一个显示提示信息的便签类CAknInformationNote(有点类似于VC中的MessageBox)。

 

下面是四个类的声明代码:

//----------------------------------------------------------------------------

// CHelloworldAppApplication

//----------------------------------------------------------------------------

class CHelloworldAppApplication : public CEikApplication

{

private:    // From CEikApplication

    CApaDocument* CreateDocumentL();

 

private:    // From CApaApplication (via CEikApplication)

    TUid AppDllUid() const;

};

 

//----------------------------------------------------------------------------

// CHelloworldAppDocument (Model)

//----------------------------------------------------------------------------

class CHelloworldAppDocument : public CEikDocument

{

public:     // Constructor

    CHelloworldAppDocument(CEikApplication& aApp);

 

private:    // From CEikDocument

    CEikAppUi* CreateAppUiL();

};

 

//----------------------------------------------------------------------------

// CHelloworldAppAppUi (Controller)

//----------------------------------------------------------------------------

class CHelloworldAppAppUi : public CAknAppUi

{

public:     // Constructors and destructor

    void ConstructL(void);   // 两段构造

    ~CHelloworldAppAppUi();  // 为什么要用虚的

 

private:    // From CEikAppUi

    void HandleCommandL(TInt aCommand); // 处理按键命令

 

private:    // Data

    CHelloworldAppContainer* iAppContainer;

};

 

//----------------------------------------------------------------------------

// CHelloworldAppContainer (View)

//----------------------------------------------------------------------------

class CHelloworldAppContainer : public CCoeControl, MCoeControlObserver

{

public:     // Constructors and destructor

    void ConstructL(const TRect& aRect);

    ~CHelloworldAppContainer();

 

public:     // New functions

 

public:     // From CCoeControl

    void SizeChanged();

    TInt CountComponentControls() const;

    CCoeControl* ComponentControl(TInt aIndex) const;

    void Draw(const TRect& aRect) const;

 

public:     // From MCoeControlObserver

    void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);

 

private:    // Data

        CEikLabel* iLabel;          // example label

        CEikLabel* iToDoLabel;      // example label

};

posted @ 2006-08-13 16:51  moonz-wu  阅读(478)  评论(0编辑  收藏  举报