×
Namespaces

Variants
Actions

Eventos do teclado - Exemplo

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Artigo
Criado por cabezonxdg em Cabezonxdg
Última alteração feita por hamishwillee em 09 Dec 2011

Para receber eventos do teclado, seu controle deve implementar a função OfferKeyEventL e ter o seu controle adicionado na Control´s stack. Pode-se passar o próprio view da aplicação como referência do control stack e isso é feito no construtor de segunda-fase na classe CAknAppUi da sua aplicação.

Para não postar todo o código AppUi da aplicação ele será omitido. A função AddToStackL() foi chamada no construtor de segunda-fase dessa classe e destruida no seu destrutor. Nesse exemplo um retângulo será exibido na tela e ele será movimentado através das arrows no teclado do celular alterando-se suas posições x e y.

EventosTecladoAppUi.cpp

void CEventosTecladoAppUi::ConstructL()
{
iAppView = CEventosTecladoAppView::NewL( ClientRect() );
AddToStackL(iAppView);
//Restante do código normal
}
 
CEventosTecladoAppUi::~CEventosTecladoAppUi()
{
if ( iAppView )
{
RemoveFromStack(iAppView);
delete iAppView;
 
iAppView = NULL;
}
 
}

EventosTecladoAppView.h

#include <coecntrl.h>
 
class CEventosTecladoAppView : public CCoeControl
{
public:
static CEventosTecladoAppView* NewL( const TRect& aRect );
static CEventosTecladoAppView* NewLC( const TRect& aRect );
virtual ~CEventosTecladoAppView();
TKeyResponse OfferKeyEventL(const TKeyEvent &aKeyEvent,
TEventCode aType);
 
public:
void Draw( const TRect& aRect ) const;
virtual void SizeChanged();
 
private:
void ConstructL(const TRect& aRect);
CEventosTecladoAppView();
//Pos do Ret. na tela , para ele movimentar x e y serão alterados
TPoint iPos;
 
};

EventosTecladoAppView.cpp

#include <coemain.h>
#include "EventosTecladoAppView.h"
 
CEventosTecladoAppView* CEventosTecladoAppView::NewL( const TRect& aRect )
{
CEventosTecladoAppView* self = CEventosTecladoAppView::NewLC( aRect );
CleanupStack::Pop( self );
return self;
}
 
CEventosTecladoAppView* CEventosTecladoAppView::NewLC( const TRect& aRect )
{
CEventosTecladoAppView* self = new ( ELeave ) CEventosTecladoAppView;
CleanupStack::PushL( self );
self->ConstructL( aRect );
return self;
}
 
void CEventosTecladoAppView::ConstructL( const TRect& aRect )
{
CreateWindowL();
SetRect( aRect );
ActivateL();
 
iPos = TPoint(0,0);
}
 
CEventosTecladoAppView::CEventosTecladoAppView()
{
}
 
CEventosTecladoAppView::~CEventosTecladoAppView()
{
}
 
void CEventosTecladoAppView::Draw( const TRect& /*aRect*/ ) const
{
CWindowGc& gc = SystemGc();
TRect drawRect( Rect());
gc.Clear( drawRect );
 
TRect rect (iPos,TSize(100,100));
gc.DrawRect(rect);
}
 
TKeyResponse CEventosTecladoAppView::OfferKeyEventL(const TKeyEvent &aKeyEvent,
TEventCode /*aType*/)
{
switch(aKeyEvent.iCode)
{
case EKeyUpArrow:
{
iPos.iY -= 3;
DrawNow();
break;
}
case EKeyDownArrow:
{
iPos.iY += 3;
DrawNow();
break;
}
case EKeyLeftArrow:
{
iPos.iX -= 3;
DrawNow();
break;
}
case EKeyRightArrow:
{
iPos.iX += 3;
DrawNow();
break;
}
default:
return EKeyWasNotConsumed;
}
return EKeyWasConsumed;
}
void CEventosTecladoAppView::SizeChanged()
{
DrawNow();
}
This page was last modified on 9 December 2011, at 07:53.
128 page views in the last 30 days.