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