Vous êtes sur la page 1sur 4

Arquitetura de um programa Windows Prof.

Fernando Branquinho

Programao Orientada a Eventos


O S.O. Windows possui um engenhoso esquema de compartilhamento dos recursos ligados interface com o usurio. Neste esquema, uma janela o dispositivo primrio de entrada e sada de dados de uma aplicao. Uma vez criada uma janela, a aplicao e o prprio Windows colaboram para gerenci-la. A aplicao gerencia principalmente a rea de cliente da janela, enquanto uma rotina chamada Windows Manager (Gerenciador de Janelas), possui responsabilidades a respeito da aparncia e uso da janela, como:

Criao e controle das janelas, menus e caixas de dilogos Leitura do teclado Utilizao do mouse Apresentao do cursor etc

Para permitir a interao com o programa do usurio, o Windows avisa a aplicao sobre as alteraes que devem ocorrer na janela. Para isso, cada janela deve possuir um "procedimento de janela", que a rotina que receber as mensagens que indicam eventos ocorridos na janela.

Sistema de Mensagens
Existem duas formas de comunicao entre as aplicaes e o Windows. Uma delas a utilizao da API pelas aplicaes, e a outra , atravs do sistema de mensagens, que permite ao Windows mandar informaes e comandos para uma janela. Uma aplicao pode possuir vrias janelas, e cada janela deve possuir uma rotina associada que seja capaz de processar as mensagens enviadas pelo Windows. Para cada aplicao, haver uma fila de mensagens, onde sero registrados os eventos ocorridos com relao a determinadas janelas. O programa ento solicita a leitura de uma mensagem de sua fila, e envia a mensagem para a janela correspondente, ou seja, para a rotina associada a janela, chamada de "procedimento de janela".

Para que isto funcione adequadamente, a aplicao deve manter constante consulta a tal fila, verificando a ocorrncia dos eventos que iro indicar o que deve ser processado. A parte do programa destinado a realizar tais consultas chamado de "Loop de Mensagens".

Tratamento das mensagens pelas aplicaes


Vamos ver como seria a estrutura de um programa para executar a soma de dois nmeros entrados via teclado como o mostrado abaixo:

Rotina WinMain

o ponto de entrada da aplicao. Chama funes que inicializam classes de janelas, criam Janelas, e realizam outras inicializaes necessrias. Implementa o Loop de mensagens, para tratar as mensagens existentes na fila da aplicao.

Assim que uma aplicao criou e mostrou uma janela, ela deve iniciar seu trabalho mais importante: Ler as mensagens da fila da aplicao, e despach-las para o procedimento de janela adequado. Isto feito dentro do Loop de mensagens.

O Windows coloca mensagens na fila da aplicao quando o usurio move o cursor sobre uma janela, pressiona ou libera um boto do mouse, quando pressiona ou libera uma tecla para janela que possui o foco atual, etc. O Loop de mensagens, deve continuar at receber um NULL, o que significa que foi gerada a mensagem WM_QUIT.

A parte do corpo principal do programa, somente realiza a leitura das mensagens que so armazenadas na fila da aplicao. Quando o programa recebe uma mensagem do WM, ele envia esta mensagem para uma rotina do prprio programa chamada de "Procedimento de Janela" afim de que o evento seja tratado.

Procedimento de Janela

O Extenso uso de Handles


Handles so ndices usados pelo Windows para identificar um objeto que foi criado, ou est sendo usado por uma aplicao.

O timer
Aproveitando a capacidade de recebimento de mensagens, o Windows oferece o recurso de programao de Timers (Temporizadores) para gerao de eventos. Aps configurado um novo temporizador (funo SetTimer da API), o ambiente passa a enviar eventos para a fila da aplicao, em uma cadncia fixa pr-

programada, permitindo a realizao de tarefas pela aplicao. Por mais que o Timer permita a programao de cadncias da ordem de 1ms, dificilmente podemos confiar em tal preciso, j que a ativao da rotina depende de vrios fatores, incluindo a prpria frequncia de leitura da fila de mensagens, principalmente por considerar que estamos trabalhando em um ambiente multitarefa.

Exerccios
1. 2. 3. 4. O que significa o termo "Programao orientada a eventos" ? O que , e para que serve o Message Loop ? Qual o papel do "Procedimento de Janela" ? Quando deve ser executado ? Considerando a arquitetura bsica de uma aplicao Windows, como deve-se montar um programa para exibir uma mensagem diferente a cada 10 segundos ?

Final do documento

Fernando J.C.Branquinho http://br.geocities.com/branqs