s60 3rd上使用自定义皮肤
2009-04-18 18:30
357 查看
在S60 3rd程序上使用自定义皮肤的方式基本同S60 2nd上的使用方式是相同,但是,有时后还是很难调试出来,因此,决定做个小例子,给大家演示怎么使用自定义皮肤。
只用自定义皮肤的过程基本如下:
1.在AppUI类中,定义下面两个成员变量,这两个变量必须定义,不然,你的皮肤可能绘不出来哦,很多朋友绘不出来自定义皮肤,有可能就是把某个变量定义成局部变量了
TAknsItemID m_SkinItemID;
TFileName desSkinImagesFile;
2.在AppUI类的ConstuctL()函数中创建自定义皮肤,如下
CEikAppUi* appUi = CEikonEnv::Static()->EikAppUi();
CEikApplication* app = appUi->Application();
desSkinImagesFile = (app->BitmapStoreName());
desSkinImagesFile.SetLength(desSkinImagesFile.LocateReverse('//') + 1);
desSkinImagesFile.Append(_L("SelfSkin.mif"));
// Create background image - use our App UID to make it unique
m_SkinItemID.iMajor = 0xECE7E35C; //该处使用程序的ID就可以了
m_SkinItemID.iMinor = 1;
CAknsItemDef* pDef = AknsUtils::CreateMaskedBitmapItemDefL(m_SkinItemID,
desSkinImagesFile,
EMbmSelfskinClientbackground ,
EMbmSelfskinClientbackground_mask);
AknsUtils::SkinInstance()->SetLocalItemDefL(pDef);
3.在view或container中使用皮肤,在使用皮肤的类中定义下面的成员变量
CAknsBasicBackgroundControlContext* m_pBackgroundContext;
实现下面的方法
TTypeUid::Ptr CSkinExample3rdAppView::MopSupplyObject(TTypeUid aId)
{
if(aId.iUid == MAknsControlContext::ETypeId && m_pBackgroundContext)
{
return MAknsControlContext::SupplyMopObject(aId, m_pBackgroundContext);
}
return CCoeControl::MopSupplyObject( aId );
}
在构造函数中,创建m_pBackgroundContext
CSkinExample3rdAppUi* appUi = (CSkinExample3rdAppUi*)CEikonEnv::Static()->EikAppUi();
m_pBackgroundContext = CAknsBasicBackgroundControlContext::NewL(appUi->m_SkinItemID, Rect(), EFalse);
4.在Draw()方法中绘制自定义的皮肤,如下
void CSkinExample3rdAppView::Draw( const TRect& aRect ) const
{
// Get the standard graphics context
CWindowGc& gc = SystemGc();
AknsDrawUtils::Background(AknsUtils::SkinInstance(),
AknsDrawUtils::ControlContext(this),
this,
gc,
aRect,
KAknsDrawParamDefault);
//以下做你自己的绘制工作
}
基本的使用皮肤的过程就是这样的,如果大家看了还是不够明白,那就通过例子代码学习一下吧,希望能够为在第三版上使用自定义的遇到问题的网友提供参考,该例子中在s60 3rd mr版中调试通过。
包含附件:下载源码
*************************************************
移软Symbian培训中心原创,转载请注明出处。
只用自定义皮肤的过程基本如下:
1.在AppUI类中,定义下面两个成员变量,这两个变量必须定义,不然,你的皮肤可能绘不出来哦,很多朋友绘不出来自定义皮肤,有可能就是把某个变量定义成局部变量了
TAknsItemID m_SkinItemID;
TFileName desSkinImagesFile;
2.在AppUI类的ConstuctL()函数中创建自定义皮肤,如下
CEikAppUi* appUi = CEikonEnv::Static()->EikAppUi();
CEikApplication* app = appUi->Application();
desSkinImagesFile = (app->BitmapStoreName());
desSkinImagesFile.SetLength(desSkinImagesFile.LocateReverse('//') + 1);
desSkinImagesFile.Append(_L("SelfSkin.mif"));
// Create background image - use our App UID to make it unique
m_SkinItemID.iMajor = 0xECE7E35C; //该处使用程序的ID就可以了
m_SkinItemID.iMinor = 1;
CAknsItemDef* pDef = AknsUtils::CreateMaskedBitmapItemDefL(m_SkinItemID,
desSkinImagesFile,
EMbmSelfskinClientbackground ,
EMbmSelfskinClientbackground_mask);
AknsUtils::SkinInstance()->SetLocalItemDefL(pDef);
3.在view或container中使用皮肤,在使用皮肤的类中定义下面的成员变量
CAknsBasicBackgroundControlContext* m_pBackgroundContext;
实现下面的方法
TTypeUid::Ptr CSkinExample3rdAppView::MopSupplyObject(TTypeUid aId)
{
if(aId.iUid == MAknsControlContext::ETypeId && m_pBackgroundContext)
{
return MAknsControlContext::SupplyMopObject(aId, m_pBackgroundContext);
}
return CCoeControl::MopSupplyObject( aId );
}
在构造函数中,创建m_pBackgroundContext
CSkinExample3rdAppUi* appUi = (CSkinExample3rdAppUi*)CEikonEnv::Static()->EikAppUi();
m_pBackgroundContext = CAknsBasicBackgroundControlContext::NewL(appUi->m_SkinItemID, Rect(), EFalse);
4.在Draw()方法中绘制自定义的皮肤,如下
void CSkinExample3rdAppView::Draw( const TRect& aRect ) const
{
// Get the standard graphics context
CWindowGc& gc = SystemGc();
AknsDrawUtils::Background(AknsUtils::SkinInstance(),
AknsDrawUtils::ControlContext(this),
this,
gc,
aRect,
KAknsDrawParamDefault);
//以下做你自己的绘制工作
}
基本的使用皮肤的过程就是这样的,如果大家看了还是不够明白,那就通过例子代码学习一下吧,希望能够为在第三版上使用自定义的遇到问题的网友提供参考,该例子中在s60 3rd mr版中调试通过。
包含附件:下载源码
*************************************************
移软Symbian培训中心原创,转载请注明出处。
相关文章推荐
- s60 3rd上使用自定义皮肤
- s60 3rd下如何使用HookLogger查找内存泄漏错误?
- maven使用中央仓库没有的jar包001---Maven自定义上传第三方包到3rd party(第三方无依赖jar和本地扩展类加入maven统一管理)
- 使用自定义皮肤
- S60 3rd下如何使用HookLogger查找内存泄漏错误
- 分享一个漂亮的Symbian S60 3rd 自定义列表框控件
- 使用S60 3rd SDK扩展获取手机wap浏览器的历史记录
- 使用Spread Studio for .NET为控件创建自定义皮肤
- S60 3rd下使用HookLogger查找内存泄漏错误
- 英雄联盟自定义皮肤教程[使用篇]
- Symbian中音频API的使用 (S60 3rd FP1)
- [视频] Symbian中视频API的使用 (S60 3rd FP1)
- Symbian中音频API的使用 (S60 3rd FP1)
- S60 3rd下如何使用HookLogger查找内存泄漏错误?
- 如何使用XE2及更高版本中提供的自定义皮肤(样式)功能
- S60 3rd下如何使用HookLogger查找内存泄漏错误?(转)
- S60 3rd下如何使用HookLogger查找内存泄漏错误
- Flex 4自定义皮肤的使用方法
- S60 3rd下使用HookLogger查找内存泄漏错误
- 如何使用XE2及更高版本中提供的自定义皮肤(样式)功能