Symbian函数(HandleListBoxEventL\OfferKeyEventL\HandleKeyEventL\HandleControlEventL)
2010-07-04 15:45:00 来源:WEB开发网从api函数中可以看出这个处理过程当windows server发送一个按键的事件便调用AppUI中的HandleWsEventL(),HandleWsEventL()方法首先调用CCoeControl::OfferKeyEventL()如果OfferKeyEvent()返回EKeyWasNotConsumed则继续调用AppUI中的HandleKeyEventL()。如果OffKeyEventL()处理了事件则返回EKeyWasConsumed。
如果想直接调用AppUI中的HandleKeyEventL()可以通过set ECoeStackFlagRefusesAllKeys 来省去调用OfferKeyEventL()。
每次按键都会产生3个事件类型1 EEventKeyDown,2 EEventKeyUp,3 EEventKeyDown;可以从OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)中的aType中得到事件类型。aKeyEvent是一个struct可以得到按键的更多属性,eg:iCode指名按了哪个键(键名在e32keys.h中)iRepeats可以判断是重复按键还是长按键。如果想改变系统的按键重复率可以通过RWsSession 的SetKeyboardRepeatRate方法来设置。
S60手机默认情况下是不能接受连续按键的且只有先按下的键可以被接受(也就是按键阻塞,电源键和编辑键默认为非按键阻塞)。可以通过s60提供的CAKnAppUI中的SetKeyBlockMode()方法来取消按键阻塞。
四、void HandleControlEventL (CCoeControl* aControl,TCoeEvent aEventType)
纯虚方法HandleControlEventL()来接收和处理按钮事件。
void CBasic_M1000AppView::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)
{ //First check the control the event is coming from
if ( aControl == iSendButton)
{
_LIT(KTEXT,"Click");
switch (aEventType)
{
case EEventPointer:
iLabel->SetTextL(KTEXT);
iLabel->DrawDeferred();
break;
default:
break;
}
}
}
Tags:Symbian 函数 HandleListBoxEventL
编辑录入:coldstar [复制链接] [打 印]更多精彩
赞助商链接