The application framework offers key events to UI controls on
the control stack by calling CCoeControl::OfferKeyEventL() for each UI control until the key event is consumed or until there
are no more UI controls on the control stack. To handle an event in
a UI control, you must override CCoeControl::OfferKeyEventL(). If a UI control is a compound control, then forward key events
to other controls within the compound control. The control that consumes
the event must be a window-owning control. An example of an implementation is as follows:
KeyResponse CMyAppView::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
{
TKeyResponse response = EKeyWasNotConsumed;
//Check first that event type is EEventKey. It could be also
//EEventKeyUp or EEventKeyDown which just inform that some key
// is pressed or released.
if( aType == EEventKey )
{
// Take out the code of the key
TInt code = aKeyEvent.iCode;
TBuf< KMessageLength > buf;
buf.AppendNum( code );
// Show the code
iEikonEnv->InfoMsg(buf);
// Forward the key event to the focused control
if( iListBox->IsFocused() )
{
response = iListBox->OfferKeyEventL( aKeyEvent, aType );
}
else if( iEditView->IsFocused() )
{
response =
iEditView->OfferKeyEventL( aKeyEvent, aType );
}
}
// Return the key consumption status
return response;
}
CMyAppView is a window-owning compound
control and iListBox and iEditView are controls inside CMyAppView. Key events
are offered to controls depending on the focus.
If your implementation consumes the event handed to it, you
must return EKeyWasConsumed. If your implementation
does not process the event, your code must return EKeyWasNotConsumed. The application framework continues to offer the event to controls
registered with the control stack from top to bottom until the event
is consumed or until there are no more controls, in which case the
event is handed to the UI controller by calling CCoeAppUI::HandleKeyEventL() for the UI controller.
Handle key events in your UI controller by overriding CCoeAppUI::HandleKeyEventL(). An example of an implementation is as follows:
TKeyResponse CMyViewAppUi::HandleKeyEventL( const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
{
if( iTabGroup == NULL )
{
return EKeyWasNotConsumed;
}
TInt active = iTabGroup->ActiveTabIndex();
TInt count = iTabGroup->TabCount();
switch( aKeyEvent.iCode )
{
case EKeyLeftArrow:
if ( active > 0 )
{
active--;
iTabGroup->SetActiveTabByIndex( active );
// ActivateLocalViewL() is used to change the view.
// To change view from another application we would use ActivateViewL()
// Send an empty message
ActivateLocalViewL( TUid::Uid( iTabGroup->TabIdFromIndex( active ) ) );
}
break;
case EKeyRightArrow:
if( ( active + 1 ) < count )
{
active++;
iTabGroup->SetActiveTabByIndex( active );
// ActivateLocalViewL() is used to change the view.
// To change view from another application we would use ActivateViewL()
ActivateLocalViewL( TUid::Uid( iTabGroup->TabIdFromIndex( active ) ) );
}
break;
default:
return EKeyWasNotConsumed;
break;
}
return EKeyWasConsumed;
}
CMyAppView is a UI controller that is using
key events from the selection key of a device to switch between two CAknView-derived views. EKeyLeftArrow and EKeyRightArrow are codes enumerated in TKeyCode and are contained in KeyEvent.iCode.
Note: The above code snippet was taken from the MyView example
application provided in the Platform Application Views package available from Nokia Developer .
See TKeyCode for more information.