如何用自己的图片作程序背景

参考资料: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!:)

你可能感兴趣的:(图片)