The UI
controller is the default handler for key events. In order
for other controls to receive events, you must register them with the control stack
with CCoeAppUi::AddToStackL()
. Controls are usually
added to the control stack in the second phase constructor.
The options are as follows:
In a traditional Symbian UI application architecture, this is done in the UI controller construction phase. An example of an implementation is as follows:
void CAddressBookAppUi::ConstructL() { BaseConstructL(); iCurrentView = CMyAppMainView::NewL( ClientRect() ); AddToStackL( iCurrentView ); }
This places iCurrentView
on top of the
control stack, which means the UI controller is underneath it in the
stack. When the application framework passes an event to the application,
the framework first requests that iCurrentView
handle it. If this control does not consume the event, then the
framework calls the method for the UI controller to handle the event.
CCoeAppUi::AddToStackL()
offers a parameter
to set the stack priority of a UI control.
You should use CCoeAppUi::RemoveFromStackL()
to remove a control from the control stack when it should no longer
receive events.
In an Symbian view architecture, this is typically done with CAknView::DoActivateL()
when the UI controls are constructed. An example of an implementation
for this approach is as follows:
void CMyView::DoActivateL(const TVwsViewId&, TUid , const TDesC8&) { if (!iUIControl) { iUIControl = CMyUiControl::NewL( this, ClientRect() ); AppUi()->AddToStackL( *this, iUiControl ); } }
This places iUiControl
on top of the control
stack, which means the UI controller is underneath it in the stack.
When the application framework passes an event to the application,
the framework first requests that iUIControl
handle
it. If this control does not consume the event, then the framework
calls the method for the UI controller to handle the event.
CCoeAppUi::AddToStackL()
offers a parameter
to set the stack priority for a UI control.
You should use CCoeAppUi::RemoveFromStackL()
to remove a control from the control stack when it should no longer
receive events.