キーイベントの取得

キーイベントについてです。

キーイベントは以下の2種類あります

HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)

OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)

AppUiではHandleKeyEventLをそのた、ViewやコントロールではOfferKeyEventLを使用します。

今回はKMTodayでの処理(AppUI)を見てみます。

TKeyResponse CKMTodayAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
if (aType == EEventKey) {
if (aKeyEvent.iCode == EKeyUpArrow) {
iAppView->curDay-=TTimeIntervalDays(1);
iAppView->CalcCalen();
iAppView->DrawNow();
return EKeyWasConsumed;
} else if (aKeyEvent.iCode == EKeyDownArrow) {
iAppView->curDay+=TTimeIntervalDays(1);
iAppView->CalcCalen();
iAppView->DrawNow();
return EKeyWasConsumed;
} else if (aKeyEvent.iCode == EKeyLeftArrow) {
iAppView->curDay-=TTimeIntervalDays(7);
iAppView->CalcCalen();
iAppView->DrawNow();
return EKeyWasConsumed;
} else if (aKeyEvent.iCode == EKeyRightArrow) {
iAppView->curDay+=TTimeIntervalDays(7);
iAppView->CalcCalen();
iAppView->DrawNow();
return EKeyWasConsumed;
} else if (aKeyEvent.iCode == EKeyOK) {
iAppView->curDay.HomeTime();
iAppView->CalcCalen();
iAppView->DrawNow();
return EKeyWasConsumed;
}
}
return EKeyWasNotConsumed;
}

KMTodayではナビゲーションキーに対して日付の処理を行っています。

まずは、キーイベントかどうかの判断を行います。
キーダウン、アップ等もここを通りますので

キーイベントだったときは何のキーが押されたか判断します。大体、左の例を見ていただければわかるかと思います。

注意しなければいけないのはキーイベントに対して処理を行ったときはEKeyWasConsumed、処理を行わなかったときはEKeyWasNotConsumedを戻すことです

また、EKeyOKですがSDKに記述されていませんので注意してください。

http://www.geocities.jp/e4840/702NK/develop/sono9.html