This page was last modified 21:33, 26 October 2007.
Controles Compostos
From Forum Nokia Wiki
A interação entre usuário e programa é feita a partir de controles. Menus, Grids e Dialogs são exemplos de controles. Um controle representa uma área retangular onde serão apresentados dados para o usuário, estes controles podem ser chamados também de Containers.
O Symbian oferece APIs para alguns controles como grids, menus, dialogs, formulários, listas, etc. Porém programadores podem criar seus próprios controles utilizando a classe CCoeControl
Contents |
Exemplos de controles do Symbian OS
CAknGrid - Grids
CEikDialog - Dialogs
CEikEdwin - Editores de texto
Controles simples e compostos
Controles podem ser simples ou compostos. Controles compostos englobam vários controles simples, sendo o controle principal responsável pelos outros chamado de Pai. É responsabilidade do controle "pai" gerênciar seus filhos através de ponteiros ,re-passar eventos e definir qual área da tela eles irão utilizar. A principal vantagem em se utilizar controles compostos é que o manuseio de outros controles se dará de forma mais fácil. Para fazer a sua implementação é necessário sobrecarregar duas funções da classe CCoeControl, CountComponentControl e ComponentControl:
TInt CountComponentControl() const;
Essa função retornará a quantidade de controles que o controle Pai "gerência".
CCoeControl* ComponentControl(TInt aIndex) const;
Os controles filhos serão controlados através desta função, o argumento aIndex será utilizado para referenciar os ponteiros para os controles filhos.
Nota: Em geral controles pais não implementam a função Draw(), quando o fazem é apenas para fazer a chamada a função Clear() do contexto gráfico para não inicializar o programa com "lixo" na tela.
Os controles filhos serão responsáveis por exibir os dados do programa para o usuário, cada controle filho terá (ou não) um espaço na tela que irá utilizar para exibir seus dados. Este espaço nada mais é do que um retângulo criado pelo controle Pai e passado como referência para seus filhos durante instâncialização dos mesmos.
A função SizeChanged() deve ser implementada no controle pai definindo o retângulo que os controles irão utilizar.
Controles que possuem janela e que não possuem uma janela
Controles são responsáveis por realizar a interação entre usuário -> programa, porém o fazem através de janelas. Em geral aplicações utilizam apenas uma janela, e é responsabilidade dos controles cria-la ou utilizar uma de outro controle. Controles que criam janelas são conhecidos como Window Owning, aqueles que não o fazem são conhecidos como Non Window Owning. Como janelas utilizam recursos, tratando-se de controles compostos em geral apenas o controle pai cria a janela e seus filhos fazem uso desta através da função SetContainerWindowL() que pode receber como argumento o controle que criou a janela. Isto garante uma econômia de recursos.
A criação/definição de uma janela se da no ConstructL de cada controle, a criação de uma janela é feita a partir da função:
CreateWindowL()
Quando um controle não criar uma janela, deverá ser definido que ele irá utilizar a janela de outro controle, essa definição é feita a partir da função:
SetContainerWindowL()
Existem diversas possibilidades de argumentos, porém a que passa o controle pai como argumento é a mais interessante em se tratar de controles compostos.
virtual void SetContainerWindowL(const CCoeControl& aContainer);
Artigos relacionados
Exemplo
Leitura complementar
Symbian OS - Creating Custom Controls (EN)
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to change the functionality of red key on emulator | RaveendraB | Symbian User Interface | 4 | 2007-10-09 10:22 |
| J2ME & Mobile Data Communications | jcecchin | Mobile Java General | 4 | 2005-02-04 17:51 |
| How to draw a bmp having no background on the uiq3 | siqiabc | General Symbian C++ | 2 | 2007-10-23 09:49 |
