symbian视图结构 在 CCoeControl中怎样切换到其他视图
来源:互联网 发布:three.js绘制弧线 编辑:程序博客网 时间:2024/05/01 09:57
在symbian中我们经常会用到视图结构(view-architecture),而且经常要从一个视图切换到另一个视图,比如在一个container中时如果要切换到其他视图,象这样是肯定不行:
YOURCONTAINER.h
CYOURAppUi * appUi;
YOURCONTAINER.cpp
TKeyResponse CYOURContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
if(aKeyEvent.iCode==EKeyDevice3)
{
appUi->ActivateLocalViewL(TUid::Uid(EGameListsViewId));/*next view?*/
return EKeyWasConsumed;
}
..........
}
虽然能编译通过,但是当你在模拟器中实行切换的时候会提示你 Kern-Exec 3 ,你仔细调试时会发现在这个过程中appUi一直都是0x000000,因为你根本就没传进来嘛只是定义了一个变量而已.程序会在
appUi->ActivateLocalViewL(TUid::Uid(EGameListsViewId))
这一步的时候panic中止,提示
Unhandled exception in epoc.exe(eikcore.dll):0xc0000005:Access Violation".
解决办法有两个:
方法一
在view中创建函数SwitchToViewL,然后传给container一个视图的指针或引用,让container通过这个指针或调用来切换:
CYOURview.h:
void SwitchToViewL(TUid aViewId);
CYOURview.cpp:
void CYOURView::SwitchToViewL(TUid aViewId)
{
AppUi()->ActiveateLocalViewL(aViewId);
}
CYOURcontainer.h
CYOURview& iView;
CYOURcontainer.cpp
if(aKeyEvent.iCode==EKeyDevice3)
{
iView.SwitchToViewL(TUid::Uid(EYOURViewId));
return EKeyWasConsumed;
}
详细点如下:
CYOURview.h:
void SwitchToViewL(TUid aViewId);
CYOURview.cpp:
void CMainView::DoActivateL(const TVwsViewId& /*aPrevViewId*/,
TUid /*aCustomMessageId*/,
const TDesC8& /*aCustomMessage*/)
{
ASSERT(iContainer == NULL);
iContainer = CMainViewContainer::NewL(*this,ClientRect());
iContainer->SetMopParent(this);
AppUi()->AddToStackL(*this,iContainer);
}
void CMainView::SwitchToViewL(TUid aViewId)
{
AppUi()->ActivateLocalViewL(aViewId);
}
////////////////////////////////
YOURCONTAINER.h
public:
static CMainViewContainer* NewL(CMainView& aView,const TRect& aRect);
static CMainViewContainer* NewLC(CMainView& aView,const TRect& aRect);
~CMainViewContainer();
private:
void ConstructL(const TRect& aRect);
CMainViewContainer(CMainView& aView);
public:
CMainView& iView; //引用,不要搞错了.(引用没有->,只有 "."运算符)
...............
YOURCONTAINER.cpp
CMainViewContainer* CMainViewContainer::NewL(CMainView& aView,const TRect& aRect)
{
CMainViewContainer* self = CMainViewContainer::NewLC(aView,aRect);
CleanupStack::Pop(self);
return self;
}
CMainViewContainer* CMainViewContainer::NewLC(CMainView& aView,const TRect& aRect)
{
CMainViewContainer* self = new (ELeave) CMainViewContainer(aView);
CleanupStack::PushL(self);
self->ConstructL(aRect);
return self;
}
CMainViewContainer::CMainViewContainer(CMainView& aView):
iView(aView),
CCoeControl(),
MCoeControlObserver(),
MCoeControlContext()
{
}
CMainViewContainer::~CMainViewContainer()
{........................
传个指针进来:
view:
iContainer=new(ELeave) CMainViewContainer;
iContainer->ConstructL(this, ClientRect());
container
CMainView * iView;
void CMainViewContainer::ConstructL(CMainView *aView, const TRect& aRect)
{
iView= aView;
...
}
..........
.
2)据说这个也好用,不过没试.((CAppUi*)iEikonEnv->EikAppUi())->HandleCommandL(ESwitchView3); //没试过哈
最近比较忙,写的也仓促,过半个月左右空闲下来再修改,如果需要的话我发example上来
- symbian视图结构 在 CCoeControl中怎样切换到其他视图
- 在symbian中实现视图间的切换
- symbian应用程序中视图切换问题[转]
- symbian应用程序中视图切换问题
- CHtmlView 在切换回其他视图时 OnDestroy() 中的处理
- 怎样在MDI程序里面切换不同的 视图?
- Symbian UIQ ViewSwitcher(视图切换方法)
- 【Tip来4发】快速在文件树视图中切换到当前文件
- Symbian S60 多视图结构的理解
- 怎样把一个控件添加到文档视图中
- 为何不能在viewDidLoad方法中显示其他视图
- Cocos2d中从场景切换到UIViewController视图方法总结
- Cocos2d中从场景切换到UIViewController视图方法总结
- Cocos2d中从场景切换到UIViewController视图方法总结
- Cocos2d中从场景切换到UIViewController视图方法总结
- 关于在VS2005环境下无法从源视图切换到设计视图的解决方案
- 关于在VS2005环境下无法从源视图切换到设计视图的解决方案
- 关于在VS2005环境下无法从源视图切换到设计视图的解决方案
- 用jni方式传递DES加密字符串 - 补充"java调用vc写的dll"
- 初试log4j
- 10分钟搞定.net正则表达式
- 基于JMF RTP的网络传输媒体流
- QScrollArea处理与显示问题
- symbian视图结构 在 CCoeControl中怎样切换到其他视图
- 今天在此开博!
- 手机广告 电视PC之后真正的第三屏幕
- HGE引擎开源了
- 利用JMF播放视频
- Visual C# .Net 环境中编程实现浮动工具栏
- Oracle树的使用
- error LNK2001: unresolved external symbol _WinMain@16的解决办法
- 一个比较精确的“在线用户列表”统计功能