This page was last modified 18:55, 7 March 2008.
HelloWorld no SymbianC++
From Forum Nokia Wiki
Este artigo já leva em consideração que você já instalou o SDK da nokia e tem o Carbide funcionando corretamente. Caso não verifique a página Como iniciar o desenvolvimento em SymbianOS.
É interessante você também ter um conhecimento prévio do que cada pasta no seu projeto representa, aconselho a leitura do artigo Pastas do projeto.
Ao criar um novo projeto Symbian OS C++ S60 3rd Gui Application, o Carbide já cria uma série de pastas e arquivos, iremos nos concentrar apenas nos arquivos da pasta src e inc, onde como o nome já diz uma contêm os sources da aplicação e a outra os cabeçalhos.
Podemos criar uma pequena descrição da funcionalidade de cada classe:
MinhaAplicacao.cpp = Cria uma instância da classe CMinhaAplicacaoApplication, esta classe é responsável por fazer a inicialização da sua aplicação.
MinhaApliacaoApplication.cpp = Esta classe tem como função retornar o UID da aplicação (cada aplicação possui um UID único que é utilizado pelo sistema para indentificá-la) e criar o Document da aplicação.
MinhaAplicacaoDocument.cpp = Esta classe pode ser um pouco mais complexa que as outras, não irei entrar em detalhes aqui. Basta saber que esta classe faz criação da Interface do usuário (AppUI).
MinhaAplicacaoAppUi.cpp = Esta classe tem como função fazer a interação entre usuário -> aplicação. Dentre uma de suas funções ela irá criar o container e gerênciar alguns menus da aplicação.
MinhaApliacacaoAppView.cpp = Esta será a classe responsável por exibir dados da aplicação para o usuário.
Antes de entrar no código da classe MinhaApliacacaoAppView é interessante conhecer algumas funções utilizadas nesta classe.
NewL() e NewLC() = Serão responsáveis por fazer a instancialização da classe e por chamar o construtor da segunda fase. Métodos que possam gerar exceção não devem ser chamado no construtor padrão da classe mas sim no ConstructL();
ConstructL() = Faz chamada a métodos que possam gerar exceção.
CCoeControl::Draw() = Desenha dados para o usuário através do contexto gráfico inicializado dentro de seu escopo.
CCoeControl::SizeChanged() = É Chamado pelo ActivateL() e quando ocorre alguma mudança no tamanho da tela.
MinhaApliacacaoAppView.cpp
/* Note que classes derivadas de CCoeControl começam com a letra C, uma conveção de nome que deve ser adotada. */ void CMinhaApliacacaoAppView::Draw( const TRect& /*aRect*/ ) const { // Instância da classe CWindowGc para manipular o contexto de gráfico CWindowGc& gc = SystemGc(); // Retangulo que representa o programa na tela TRect drawRect( Rect()); // Limpa a tela gc.Clear( drawRect ); }
Antes de poder imprimir um texto é preciso antes definir a fonte que o texto irá utilizar e informar ao contexto gráfico a utilização desta fonte ou então será gerado um código de pânico na execução da aplicação. A definição da fonte é feita através de uma instância da classe CFont, essa instância será feita dentro da classe Draw.
const CFont* fontetexto = iEikonEnv->TitleFont();
fontetexto = instância da fonte criada.
iEikonEnv->TitleFont(); = Recupera a fonte utilizada por TitleFont();
Com a fonte definida, agora deveremos informar que ela será utilizada na hora de imprimir o texto, esse procedimento é feito utilizando a função UseFont do contexto gráfico:
virtual void UseFont(const CFont *aFont);
Essa definição será feita também na classe Draw:
gc.UseFont(fonteTexto);
Para desenhar o texto na tela será utilizada função DrawText do contexto gráfico. Sua sintaxe:
virtual void DrawText(const TDesC &aString,const TPoint &aPosition);
const TDesC &aString - A string que será mostrada.
const TPoint &aPosition - A posição relativa na tela onde a string será mostrada.
A string a ser mostrada será definida através do uso da macro _LIT (Poderiamos utilizar outra forma como o uso de TBuf por exemplo , mas o uso de literários facilita no começo)
Exemplo:
_LIT(KHelloWord, "Hello Word - Ola Mundo");
Agora é preciso determinar a posição que esse literário será mostrado na screen. Para isso iremos utilizar a classe TPoint definida como:
TPoint(TInt aX,TInt aY);
A forma na qual o Symbian OS trata as cordenadas cartesianas é diferente da tradicional (a origem é na posição superior esquerda da tela) mas como referência iremos utilizar as posições 100,100. Iremos utilizar uma instância da classe TPoint para determinar a posição que o texto será exibido. Esta instância pode ser criada dentro da função Draw.
TPoint posTexto(100,100);
OBS: Para poder usar a macro iEikonEnv, deve-se primeiro incluir o header eikenv.h. No começo do arquivo logo abaixo de #include <coemain.h>, insira #include <eikenv.h>.
Com todos os procedimentos realizados, sua função Draw deve estar parecida com essa:
MinhaApliacacaoAppView.cpp
/* Note que classes derivadas de CCoeControl começam com a letra C, uma conveção de nome que deve ser adotada. */ void CMinhaApliacacaoAppView::Draw( const TRect& /*aRect*/ ) const { // Instância da classe CWindowGc para manipular o contexto de gráfico CWindowGc& gc = SystemGc(); // Retangulo que representa o programa na tela TRect drawRect( Rect()); // Limpa a tela para não pegar resticios da tela anterior gc.Clear( drawRect ); // Posição onde o texto será exibido TPoint posTexto(100,100); // Definição da fonte a ser utilizada const CFont* fonteTexto = iEikonEnv->TitleFont(); // Utiliza a fonte definida para imprimir textos gc.UseFont(fonteTexto); /* Literário que contêm a string que será mostrada, note que a variável começa com K, mais uma conveção de nome informando que é uma constante */ _LIT(KHelloWord, "Hello Word - Ola Mundo"); /* Usando a função DrawText para imprimir o texto na tela, utilizando a posição já definida anteriormente */ gc.DrawText(KHelloWord, posTexto); }
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Problem building s80 helloworld in carbide | garthlieb | Symbian Tools & SDKs | 1 | 2007-07-26 16:15 |
| pls read | devi20_p | Symbian Tools & SDKs | 0 | 2005-01-04 09:36 |
| Another HelloWorld Build Error | truf | Carbide.c++ and CodeWarrior Tools | 10 | 2007-06-13 16:06 |
| Debub HelloWorld.exe in Borland C++ | Basetta | Symbian Tools & SDKs | 0 | 2004-02-08 10:51 |
| Emulator problems | malloc | Symbian Tools & SDKs | 4 | 2006-09-11 10:11 |
