参考资料:http://www.devdiv.net/viewthread.php?tid=2667&highlight=Grid
步骤:
1、*Ui.cpp源文件
在构造函数ConstructL()中:
BaseConstructL(EAknEnableSkin),让程序支持皮肤功能。
2、 MMP文件
START BITMAP bg.mbm
HEADER
SOURCEPATH ..icons
SOURCE c12 bg.bmp
END
HEADER
SOURCEPATH ..icons
SOURCE c12 bg.bmp
END
在项目的文件目录下新建一个icons文件夹,里面添加想要的背景图片,这里是bg.bmp;
当然,这个可以自己定制。
3、Container.h头文件
// FORWARD DECLARATION
class CAknsBasicBackgroundControlContext;
class CAknsBasicBackgroundControlContext;
该类的头文件:AknsBasicBackgroundControlContext.h
库:AknSkins.lib
添加成员变量:
CAknsBasicBackgroundControlContext* iBackGround;
4、Container.cpp源文件
添加头文件:
#include <AknsBasicBackgroundControlContext.h> //for CAknsBasicBackgroundControlContext
#include <AknsDrawUtils.h> //for AknsDrawUtils, CAknsItemDef and MAknskinInstance
#include <AknUtils.h> //for CompeleteWithAppPath()
#include <bg.mbg> //Background file
#include <AknsDrawUtils.h> //for AknsDrawUtils, CAknsItemDef and MAknskinInstance
#include <AknUtils.h> //for CompeleteWithAppPath()
#include <bg.mbg> //Background file
ConstructL()中添加:
iBackGround = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse );
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
_LIT(KBitmapPath,"bg.mbm");
TFileName bitmapFile (KBitmapPath);
User::LeaveIfError(CompleteWithAppPath(bitmapFile));
CAknsItemDef* mainBgItemDef = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnBgAreaMain,bitmapFile,EMbmBgBg);
skin->SetLocalItemDefL( mainBgItemDef );
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
_LIT(KBitmapPath,"bg.mbm");
TFileName bitmapFile (KBitmapPath);
User::LeaveIfError(CompleteWithAppPath(bitmapFile));
CAknsItemDef* mainBgItemDef = AknsUtils::CreateBitmapItemDefL(KAknsIIDQsnBgAreaMain,bitmapFile,EMbmBgBg);
skin->SetLocalItemDefL( mainBgItemDef );
SizeChanged()中添加:
if ( iBackGround )
{
iBackGround->SetRect( Rect() );
if ( &Window() )
iBackGround->SetParentPos( PositionRelativeToScreen() );
}
{
iBackGround->SetRect( Rect() );
if ( &Window() )
iBackGround->SetParentPos( PositionRelativeToScreen() );
}
Draw() 中添加:
MAknsSkinInstance* skin = AknsUtils::SkinInstance();
MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
AknsDrawUtils::Background( skin, cc, this, gc, aRect );
MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
AknsDrawUtils::Background( skin, cc, this, gc, aRect );
添加成员函数:
TTypeUid::Ptr CModel2ndContainer::MopSupplyObject(TTypeUid aId)
{
if(aId.iUid == MAknsControlContext::ETypeId && iBackGround)
{
return MAknsControlContext::SupplyMopObject( aId, iBackGround);
}
return CCoeControl::MopSupplyObject( aId );
}
{
if(aId.iUid == MAknsControlContext::ETypeId && iBackGround)
{
return MAknsControlContext::SupplyMopObject( aId, iBackGround);
}
return CCoeControl::MopSupplyObject( aId );
}
别忘了先在头文件中声明,这个函数不知道在哪里被调用,但是必须要有。
析构函数添加:
delete iBackGround;
这样,程序编译、运行后应该就能看见自定义的背景了,HF!:)