概要
*UI控制項
- 控制項棧
- 按鍵事件流
*預定義控制項
- Menu(菜單)
- Dialog(對話方塊)
- Note(通知對話方塊)
- Query(輸入對話方塊)
- Editor(編輯器)
- Form(表單)
UI
*控制項的作用是
- 為使用者顯示資訊
- 對按鍵事件做出響應
*從CCoeControl繼承
控制項棧
*控制項棧處理不同控制項間的按鍵事件流
*由AppUi所有
*控制項需要註冊到控制項棧來獲得按鍵事件
- CCoeAppUi::AddToStackL(...)
@註冊到控制項棧
- CCoeAppUi::RemoveFromStack(...)
@取消與控制項棧的註冊
- CCoeControl::OfferKeyEventL(...)
@重寫CCoeCoontrol衍生類別來獲得按鍵事件
控制項棧-樣本
*與控制項棧註冊
void CMyAppUi::ConstructL()
{
BaseConstructL();
iAppContainer = CMyContainer::NewL(ClientRect());
AddToStackL(iAppContainer);
}
*與控制項棧取消註冊
CMyAppUi::~CMyAppUi()
{
if(iAppView)
{
RemoveFromStack(iAppContainer);
delete iAppView;
}
}
*接收按鍵事件
TKeyResponse CMyContainer::OfferKeyEVentL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
TKeyRespose ret = EKeyWasNotConsumed;
if(aType == EEventKey)
{
switch(aKeyEvent.iCode)
{
case EKeyLeftArrow;
// 將球左移
...
ret = EKeyWasConsumed;
break;
...
}
}
return ret;
}
事件流
*控制項棧中往往有多個控制項
*控制項根據AddToStackL()的參數按照優先順序高低(高者先接收)來接收事件
- 軟健:ECoeStackPriorityCba(=60)
- 對話方塊:ECoeStackPriorityDialog(=50)
- 菜單:ECoeStackPriorityMenu(=10)
- 其他控制項預設值:ECoeStackPriorityDefault(=0)
*相同優先順序的控制項按照註冊的順序來接收事件
*如果控制項對某個事件不關注,則返回EKeyWasNotConsumed,該值將傳遞至其他的控制項
*控制項如果處理事件則返回EKeyWasConsumed