Symbian 学习之不同应用程序的视图切换
2010-03-19 15:49:00 来源:WEB开发网const TDesC8& aCustomMessage:对于特定的消息,能够让目标视图接受的消息内容。
修改MyMultiView示例程序。
在目标视图的头文件ListView.h中,定义一个消息UID:
const TUid KCustomMessageUid = {1};
在目标视图的实现文件ListView.cpp中,需修改DoActivateL()函数,代码:
void CListView::DoActivateL(
const TVwsViewId& ,TUid aCustomMessageId,
const TDesC8& aCustomMessage)
{
if (!iContainer)
{
iContainer = new (ELeave) CListViewContainer;
iContainer->SetMopParent(this);
iContainer->ConstructL( ClientRect() );
AppUi()->AddToStackL( *this, iContainer );
}
if (aCustomMessageId == KCustomMessageUid)
{
//如果是需要捕获的消息,根据消息的内容,更改列表的初始选项
TUint index = aCustomMessage[0];
CAknSingleStyleListBox* listbox = iContainer->iListBox;
listbox->SetCurrentItemIndex(index);
//下面的代码显示一条消息,提示用户当前列表的缺省选项有变化,并不完成功能性操作
TBuf<32> buf;
_LIT(KFormat1,"The index is: %d");
buf.Format(KFormat1,index);
iEikonEnv->InfoMsg(buf);
}
}
修改MySwitchTest示例程序
MySwitchTest示例程序需要定义与目标视图一致的消息UID,在 MySwitchTestAppUi.cpp中定义:
const TUid KCustomMessageUid = {1};
切换视图时,需要构造一个目标视图可以理解的数据包,并以它为参数调用ActiveViewL()函数:
void CMySwitchTestAppUi::HandleCommandL(TInt aCommand)
{
switch ( aCommand )
{
case EAknSoftkeyBack:
case EEikCmdExit:
{
Exit();
break;
}
case EMySwitchTestCmdAppTest:
{
iEikonEnv->InfoMsg(_L("test"));
TVwsViewId listView (KUidMyMultiView, KUidListView);
更多精彩
赞助商链接