Nome: Luiz Fernando Stein Wetzel
Sistema de Janelas usado no Editor 2D (IA369J.exe)
 
O IA369J foi desenvolvido usando o sistema de janelas do MS Windows e as seguintes ferramentas / recursos de programação:
 
A bibliotece gráfica utilizada foi o GDI (Graphics Device Interface) que é a biblioteca gráfica nativa do Windows. Esta biblioteca não fornece nenhum suporte para testes de pertinência, nem suporte para manipulação e seleção dos objetos desenhados, de forma que este tratamento é todo feito no código do aplicativo.
 
A MFC (Microsoft Foundation Classes) foi muito útil na estruturação do aplicativo. Ela simplifica o tratamento de barras de ferramentas, menus, barra de status, tratamento de eventos de mouse, conversão entre o sistema de coordenadas do mouse (física) e do documento (lógica). Alem disso a MFC fornece uma coleção de classes que encapsulam os objetos da GDI, auxiliando assim o uso desta outra biblioteca.
 
Outra caracteristica da MFC que foi utilizada é a estrutura “Document - View”. A classe Document armazena os dados que estão sendo manipulados e trata da sua persistencia em arquivo. A classe View apresenta os dados contidos no Document e trata da seleção e manipulação direta dos objetos.
 
Projeto Funcional do seu editor gráfico 2D (IA369J.exe)


Classe CIA369Jdoc

 
Descrição: Objeto onde são armazenados os dados. Estes dados serão salvos e recuperados de arquivos.
Função:AddNewLine
Parametros:ptRef-Ponto onde será desenhada a nova linha

Descrição:Adiciona uma reta com atributos default no documento

Feedback:A nova reta é mostrada na tela

Erros:Nenhum

Função:AddNewTriangle
Parametros:ptRef-Ponto onde será desenhado o triângulo

Descrição:Adiciona um triângulo com atributos default no documento

Feedback:O novo triângulo é mostrado na tela

Erros:Nenhum

Função:AddNewRectangle
Parametros:ptRef-Ponto onde será desenhado o triângulo

Descrição:Adiciona um retângulo com atributos default no documento

Feedback:O novo retângulo é mostrado na tela

Erros:Nenhum

Função:AddNewCircle
Parametros:ptRef-Ponto onde será desenhado o círculo

Descrição:Adiciona um círculo com atributos default no documento

Feedback:O novo círculo é mostrado na tela

Erros:Nenhum

Função:Move_up
Parâmetros:Referência a um objeto gráfico (reta, triângulo, retângulo ou circulo)

Descrição:Move objeto um nível acima no eixo z.

Feedback:O objeto é redesenhado na nova posição

Erros:Quando o objeto já está no topo.

Função:Move_down
Parâmetros:Referência a um objeto gráfico (reta, triângulo, retângulo ou circulo)

Descrição:Move objeto um nível abaixo no eixo z.

Feedback:O objeto é redesenhado na nova posição

Erros:Quando o objeto já está na base.

Função:Move_top
Parâmetros:Referência a um objeto gráfico (reta, triângulo, retângulo ou circulo)

Descrição:Move objeto para o topo (eixo z)

Feedback:O objeto é redesenhado na nova posição

Erros:Nenhum.

Função:Move_bottom
Parâmetros:Referência a um objeto gráfico (reta, triângulo, retângulo ou circulo)

Descrição:Move objeto para o fundo (eixo z)

Feedback:O objeto é redesenhado na nova posição

Erros:Nenhum.

Função:Draw
Parametros:pDC-Contexto onde será desenhado o documento

pSelObj -Referência ao objeto selecionado (NULL se não houver objeto selecionado)

Descrição:Desenha o documento

Feedback:Todos os objetos são desenhados

Erros:Nenhum.

Classe CGraphObj

Descrição:Objeto gráfico genérico. Os objetos específicos são derivados deste e devem implementar as funções virtuais descritas a seguir.
Data Member:m_cor
Tipo:COLORREF

Descrição:define a cor do objeto

Data Member:m_ptRef
Tipo:POINT

Descrição:Ponto de referêcia.Todos outras coordenadas que o objeto define devem ser em relação a este ponto.

Data Member:m_zorder
Tipo:LONG
Descrição:Indica a posição do objeto no eixo z. A função Draw deve ser chamada em ordem crescente de zorder.

Data Member:m_deleted
Tipo:BOOL
Descrição:Indica que o objeto foi “deletado”, não devendo portantos ser desenhado ou salvo em arquivo. Este flag é colocado para facilitar a implementação da pilha de Undo.

Função:Move
Parâmetros:Nova Posição ou deslocamento em relação à posição original

Descrição:Move objeto para nova posição

Feedback:O objeto é redesenhado na nova posição

Erros:Nenhum.

Função:Draw
Tipo:Virtual

Parâmetros:pDC- Contexto onde deve ser desenhado o objeto.

bSelected –TRUE-Desenha objeto selecionado

FALSE-Desenha objeto não selecionado

Descrição:Desenha o objeto.

Feedback:O desenho do objeto.

Erros:Nenhum.

Função:Test_point
Tipo:Virtual

Parâmetros:pt- Ponto que deve ser testado.

Descrição:Testa um ponto.

Feedback:O cursor do mouse deve ser desenhado de acordo com o retorno desta função.

Retorno:Valor formado a partir dos seguites bits:

PTTEST_INSIDE-Ponto interno ao objeto

PTTEST_HANDLE-Ponto interno a algum “handler”.

Função:Bound_rectangle

Tipo:Virtual

Parâmetros:Nenhum.

Descrição:Calcula o retângulo que enquadra o objeto (incluindo os possíveis handlers).

Retorno:Retângulo que enquadra o objeto.

Erros:Nenhum

Função:Grab_point
Tipo:Virtual

Parâmetros:pt-Ponto que será movido.

bSelected-Indica se este objeto está selecionado ou não

Descrição:Inicia uma operação de movimentação ou alteração da forma de um objeto através do mouse.

Feedback:O objeto gráfico deve ser redesenhado na nova posição ou com a nova forma quando a função Move_point for chamada.

Retorno:TRUEse arrastar o ponto pt for alterar o objeto em questão.

FALSEse pt não deslocar nem deformar o objeto

Erros:Nenhum
Função:Release_point
Tipo:Virtual

Parâmetros:pt- Posição final do ponto que estava sendo arrastado

Success- TRUE – Finaliza a operação

- FALSE – Cancela a operação

Descrição:Finaliza uma operação de drag and drop de um objeto. Termina um comando de drag and drop iniciado com a chamada de Grab_point.

Feedback:O objeto deve ser desenhado na sua posição final (em caso de sucesso) ou voltar para sua posição de origem (caso o comando seja cancelado, ou seja Success = FALSE)

RetornoO retângulo que engloba a área que deve ser redesenhada.

Erros:Nenhum

Função:Move_point
Tipo:Virtual

Parâmetros:pt- Posição para onde o ponto indicado em Grab_point foi movido.

Descrição:Esta função deve ser chamada após a chamada de Grab_point quando o mouse é movido. Quando for chamada a função Draw a figura desenhada deve refletir este estado.

Retorno:retângulo que engloba a área que deve ser redesenhada.

Erros:Nenhum

Função:Show_properties
Tipo:Virtual

Parâmetros:Nenhum

Descrição:Mostra um diálogo que apresenta e permite alteração das propriedades do objeto.

Feedback:O diálogo é apresentado

Retorno:TRUE – houve alteração de propriedades.

FALSE – não houve alteração de propriedades.

Erros:Nenhum

Classe CLineObj : public CGraphObj

Data Member:m_pt1, m_pt2;
Tipo:POINT

Descrição:Extremos da reta.A posição dos pontos é relativa a ptRef.

Data Member:m_style
Tipo:LONG

Descrição:Define o estilo da reta.

 

Classe CTriangObj : public CGraphObj

Data Member:m_pt1, m_pt2, m_pt3;
Tipo:POINT

Descrição:Vértices do triângulo

Classe CRectObj : public CGraphObj

Data Member:m_left, m_top, m_bottom, m_right;
Tipo:LONG

Descrição:Lados do retângulo

Classe CCircleObj : public CGraphObj

Data Member:m_center;
Tipo:POINT

Descrição:Centro do círculo

Data Member:m_radius;
Tipo:LONG

Descrição:Raio do círculo

Interface Gráfica

A forma diálogo segue os seguintes estilos:

WYSIWYG

Icônica

Menus

CSO Pós Fixo
 

Barra de ferramentas gráficas para criação de novos objetos

Objetoselecionado

Barra de cores

Barra de status

Algumas dicas para utilização do aplicativo:

·Os objetos são desenhados na mesma ordem que são criados. Se quisermos alterar esta ordem, por exemplo desenhar a chaminé sobre o telhado, basta clicar com o botão direito sobre a chaminé e escolher a opção Move para o topo
 

·Todas as funções disponíveis nas barras de ferramentas estão também disponíveis através de menus.

·Todas as barras de ferramentas e status podem ser escondidas através do menu Mostra.

·Todas as barras de ferramentas podem ser arrastadas para se alojarem em outro lado da janela ou para serem usadas como janelas flutuantes.


Comentários do autor sobre a versão final


Usei o projeto desenvolvido no curso como exemplo de uso de algumas funções de GDI para um grupo de desenvolvedores da Motorola. Ao código já apresentado foram acrescentadas as seguintes funções:
Melhorias: