参考资料: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
在项目的文件目录下新建一个icons文件夹,里面添加想要的背景图片,这里是bg.bmp;
当然,这个可以自己定制。
3、Container.h头文件
//
FORWARD DECLARATION
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
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 );
SizeChanged()中添加:
if
( iBackGround )

...
{
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 );
添加成员函数:
TTypeUid::Ptr CModel2ndContainer::MopSupplyObject(TTypeUid aId)

...
{
if(aId.iUid == MAknsControlContext::ETypeId && iBackGround)

...{
return MAknsControlContext::SupplyMopObject( aId, iBackGround);
}
return CCoeControl::MopSupplyObject( aId );
}
别忘了先在头文件中声明,这个函数不知道在哪里被调用,但是必须要有。
析构函数添加:
delete iBackGround;
这样,程序编译、运行后应该就能看见自定义的背景了,HF!:)