This article can tell you how to write a enable skins application.
Add two include files in SkinExampleContainer.h
new and delete a MAknsControlContext class in Container class
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
Code:
#include <AknsDrawUtils.h>// add this inlcude file skin
#include <AknsBasicBackgroundControlContext.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
{
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();
{
CreateWindowL();
iLabel = new (ELeave) CEikLabel;
iLabel->SetContainerWindowL( *this );
iLabel->SetTextL( _L("Skin Example") );
iLabel->SetContainerWindowL( *this );
iLabel->SetTextL( _L("Skin Example") );
SetRect(aRect);
iBackGround = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );// new a background
iBackGround = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );// new a background
ActivateL();
}
}
Delete iBackGroud
Code:
// Destructor
CSkinExampleContainer::~CSkinExampleContainer()
{
.....
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
}
{
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);
}
{
if(aId.iUid == MAknsControlContext::ETypeId && iBackGround)
{
return MAknsControlContext::SupplyMopObject( aId, iBackGround);
}
return CCoeControl::MopSupplyObject( aId );
}
}
转载自:http://www.symbianer.com/post/3.html
附: windcao在csdn博客上的一篇文章地址: 地址:http://blog.csdn.net/windcao/archive/2007/09/10/1779413.aspx |