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

Using Theme in an Application--在应用中使用主题(Symbian)

2007-11-19 19:41 736 查看
 This article can tell you how to write a enable skins application.

You can use theme in an Application after version in S60 Platform 2nd Edition. the following content will tell you how to do these step by step.



Link against aknskins.lib and include files

Add the libray named aknskins.lib in SkinSample.mmp
 

Code:
LIBRARY aknskins.lib // link against aknskins.lib

Add two include files in SkinExampleContainer.h

 

Code:
#include <AknsDrawUtils.h>// add this inlcude file skin
#include <AknsBasicBackgroundControlContext.h> //add this inlcude file skin

 
Enabling skins in AppUi

Code:
/* In SkinExampleAppUi.cpp */

void CSkinExampleAppUi::ConstructL()
    {
    BaseConstructL( EAknEnableSkin );//Construct a enalbe skin
    .....
    }

new and delete a MAknsControlContext class in Container class

Add a MAknsControlContext class in container class

Code:
/* In skinExampleContainer.h */

class CSkinExampleContainer : public CCoeControl, MCoeControlObserver
{
 ....  
  private:
  MAknsControlContext* iBackGround; // for skins support 
}
 
/* In SkinExapleContainer.cpp */ 

void CSkinExampleContainer::ConstructL(const TRect& aRect)
    {
    CreateWindowL();
 
    iLabel = new (ELeave) CEikLabel;
    iLabel->SetContainerWindowL( *this );
    iLabel->SetTextL( _L("Skin Example") );
 
    SetRect(aRect);
    iBackGround = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );// new a background
    ActivateL();
    }

 
Delete iBackGroud

Code:
// Destructor
CSkinExampleContainer::~CSkinExampleContainer()
    {
   .....

 delete iBackGround;
    }

 

Draw the background bitmap using Skin library

Code:
/* In SkinExapleContainer.cpp */

void CSkinExampleContainer::Draw(const TRect& aRect) const
    {
    CWindowGc& gc = SystemGc();
 // draw background
 MAknsSkinInstance* skin = AknsUtils::SkinInstance();//new
 MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );//new
    AknsDrawUtils::Background( skin, cc, this, gc, aRect );//new
    }

 

MObjectProvider Chains

MObjectProvider interface can be used to make object instances available to child controls.
MopSupplyObject returns a pointer based on the given UID.

Code:
/* In SkinExapleContainer.cpp */

TTypeUid::Ptr CSkinExampleContainer::MopSupplyObject(TTypeUid aId)
    {
    if(aId.iUid == MAknsControlContext::ETypeId && iBackGround)
        {
        return MAknsControlContext::SupplyMopObject( aId, iBackGround);
        }
 
    return CCoeControl::MopSupplyObject( aId );
    }

 download SkinExample.SIS(For S60 2rd FP3)
 download source code SkinExample.rar
 

转载自:http://www.symbianer.com/post/3.html

     

  附:    windcao在csdn博客上的一篇文章地址:

symbian系统皮肤(theme)使用方法汇总  

地址:http://blog.csdn.net/windcao/archive/2007/09/10/1779413.aspx

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐