domingo, 8 de maio de 2011

GDI (Graphics Device Interface)

Introdução
    O GDI (Graphics Device Interface) - Interface para dispositivos gráficos - abstrai a comunicação entre um programa e os dispositivos gráficos de saída, como monitor e impressora, por exemplo. Devido à esta abstração um programador não precisa conhecer detalhes específicos sobre o hardware para escrever um programa que desenhe primitivas gráficas. Através do GDI podemos trabalhar com gráficos vetoriais 2D, imagens e fontes. Para isso nós precisamos criar um Contexto de Dispositivo (DC - Device Context), em wxWidgets esta classe é a wxDC (que não pode ser usada diretamente). A classe wxDC é uma classe genérica que possui classes derivadas para diferentes tarefas, estas classes são:
  • wxBufferedDC
  • wxBufferedPaintDC
  • wxPostScriptDC
  • wxMemoryDC
  • wxPrinterDC
  • wxScreenDC
  • wxClientDC
  • wxPaintDC
  • wxWindowDC
      A classe wxScreenDC é usada para desenhar em qualquer lugar na tela. A classe wxWindowDC é usada para desenhar em qualquer local da janela (apenas Windows). A classe wxClientDC é usada para desenhar na área cliente da janela, isto é, menos barra de título e bordas. A classe wxPaintDC faz o mesmo que wxClientDC exceto pelo fato de que wxPaintDC só pode ser usada no evento wxPaintEvent e wxClientDC não pode ser usada neste evento. A classe wxMemoryDC é usada para desenhar gráficos em bitmap. A classe wxPostScriptDC é usada para criar arquivos PostScript. A classe wxPrinterDC é usada para acessar a impressora (apenas no Windows).

wxColour
   A classe wxColour representa uma cor RGB (Red, Green, Blue). Seu construtor define a intensidade de cada uma dessas três cores que varia de 0 a 255. Todas as outras cores são variações de intensidade das combinações das cores RGB.

wxPen
    A classe wxPen é utilizada para desenhar linhas e bordas de primitivas, como retângulos, elipses, etc. Em seu construtor podemos definir a cor, largura (default = 1) e o estilo (default = wxSOLID) da linha ou borda.

wxBrush
    A classe wxBrush é utilizada para definir a cor de preenchimento das primitivas gráficas, o brush pode ter uma cor e um estilo (default = wxSOLID).

Exemplo
    Para desenhar um retângulo de cor vermelha com borda branca faríamos da seguinte forma:

    void OnPaint(wxPaintEvent &evt)
    {
         int x = 10, y = 10, largura = 10, altura = 20;
         wxPaintDC dc(this);
         wxBrush brush(wxColour(255,0,0), wxSOLID);
         dc.SetBrush(brush);
         wxPen pen(wxColour(255,255,255);
         dc.SetPen(pen);
         dc.DrawRectangle(x, y, largura, altura);
    }

O jogo da "cobrinha"
    Quem nunca viu o famoso jogo da cobrinha? Se você nunca viu (o que eu duvido), abaixo segue uma imagem do jogo, que eu fiz utilizando wxWidgets (com alguns pequenos "bugs ", mas, bugs à parte, o objetivo foi dar um exemplo prático de utilização da GDI com wxWidgets e outras classes que serão abordadas em posts futuros). O projeto pode ser baixado em: http://www.4shared.com/file/b0KZqryl/JogoCobrinha.html









2 comentários:

  1. Muito bom ! Difícil achar em português algo para wxWidgets. Eu estou começando a utiliza-lo. Ainda não entendí como montar uma janela com wxSizer, se vc puder nos mostrar seria legal.
    sds

    ResponderExcluir
  2. Obrigado pelos comentários Felipe.
    Acho que oq vc precisa está no post sobre Gerenciamento de Layout: http://widgetscomcafe.blogspot.com/2011/04/gerenciamento-de-layout-com-wxwidgets.html
    Qualquer dúvida pergunte.
    Abraço.

    ResponderExcluir