interface gdi

7

Click here to load reader

Upload: renato-luiz-cardoso

Post on 23-Jan-2018

129 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Interface gdi

Interface GDIInterface GDIProf. Renato L. CardosoProf. Renato L. Cardoso

Page 2: Interface gdi

Classes de Contexto• Anteriormente, a função membro da classe view OnDraw, recebia como

parâmetro um ponteiro para um objeto contexto de dispositivo que foi utilizado para selecionar um preenchimento e desenhar uma elipse. No Windows, um contexto de dispositivo é um elemento da GDI que representa um dispositivo físico.

• A MFC possui varias classes que representam um contexto de dispositivo (ver Hierarchy Chart) . A classe base CDC, possui todos os membros necessários a realização de um desenho. Quando um objeto contexto de dispositivo é criado, seu ponteiro pode ser passado a funções como, por exemplo, a OnDraw.

• Para contexto de tela, normalmente são utilizadas as classes derivadas CClientDC e CWindowDC. Para outros dispositivos, como impressoras e buffers de memória, a classe base CDC é normalmente utilizada.

Page 3: Interface gdi

CClientDC e CWindowDC• Lembrando que a área cliente de uma janela exclui as

bordas, a barra de título, o menu e as barras de ferramentas e status, se um objeto do tipo CClientDC for criado, ele corresponderá a um contexto de dispositivo que estará mapeando apenas a área cliente portanto, não será possível desenhar fora dela. O ponto (0,0) desse contexto estará referenciando o canto superior esquerdo da área cliente da janela.

• Se um objeto do tipo CWindowDC for criado, o ponto (0,0) estará se referenciando ao canto superior esquerdo da área não-cliente da janela. Lembrar que a janela view não possui uma área não cliente, portanto o contexto CWindowDC é mais aplicável a janelas frames.

Page 4: Interface gdi

Construindo e destruindo CDCs

• Após construir um objeto do tipo CDC, é muito importante destruí-lo, logo após ele não mais estar sendo utilizado. O Windows limita o número de contextos de dispositivo disponíveis, e se um contexto não for destruído (release), uma pequena quantidade de memória ficará perdida até o fechamento de seu programa.

• Freqüentemente é necessário criar um objeto contexto de dispositivo dentro de funções que mapeiam as mensagens, como por exemplo a OnLButtonDown.

Page 5: Interface gdi

Exemplo (Criado na Pilha – Stack)

void CCurso3BView::OnLButtonDown(UINT nFlags, CPoint point)

{CClientDC dc(this); // constroi um dc na pilhaCRect rectDevice = m_rectElipse;dc.LPtoDP(rectDevice); // converte

coordenadas}

Page 6: Interface gdi

Outras formas...• Outra forma de conseguir um contexto em

uma função mapeada é utilizando o membro da classe mãe CWnd::GetDC, como mostrado no código abaixo.

• Sempre que este método for utilizado deve-se chamar a função ReleaseDC para destruir o contexto de dispositivo criado.

Page 7: Interface gdi

Exemplo:void CCurso3BView::OnLButtonDown(UINT nFlags,

CPoint point){CDC* pDC = GetDC(); // ponteiro para contexto

internoCRect rectDevice = m_rectElipse;pDC->LPtoDP(rectDevice); // converte coordenadasReleaseDC(pDC); // não deve ser esquecido.}