Desenhando uma exibição
Quase todo o desenho em seu aplicativo ocorre na função de membro de OnDraw da exibição, que você deve substituir em sua classe da exibição. (A exceção é desenho do mouse em, discutido em Interpretando a entrada do usuário através de uma exibição.) A substituição de OnDraw :
Obtém dados chamando funções de membro do documento que você fornece.
Exibe os dados chamando funções de membro de um objeto do dispositivo contexto que a estrutura passa a OnDraw.
Quando os dados de um documento será alterado de alguma forma, a exibição deve ser redesenhada para refletir as alterações. Geralmente, isso ocorre quando o usuário faz uma alteração com uma exibição no documento. Nesse caso, a exibição chama a função de membro de UpdateAllViews do documento para notificar todas as exibições no mesmo documento para atualizar-se. UpdateAllViews chama a função de membro de OnUpdate de cada exibição. A implementação padrão de OnUpdate invalida a área do cliente da exibição. Você pode substituí-la para invalidar somente as regiões da área de cliente que mapeiam para as partes alteradas do documento.
A função de membro de UpdateAllViews da classe CDocument e a função de membro de OnUpdate da classe CView permitem passar informações que descrevem quais partes do documento foram alteradas. Esse mecanismo de “dica” permite limitar a área que a exibição deve redesenhar. OnUpdate usa dois argumentos “dica”. O primeiro, lHint, do tipo LPARAM, deix-o-ar transmitir todos os dados que você gostar, quando o segundo, pHint, do tipo CObject*, permite passar um ponteiro para qualquer objeto derivado de CObject.
Quando uma exibição se tornar inválido, as janelas a envia uma mensagem de WM_PAINT . A função de manipulador de OnPaint de exibição responder à mensagem criando um objeto do dispositivo contexto da classe CPaintDC e chama a função de membro de OnDraw de sua exibição. Você não tem que normalmente escrever uma função substituindo do manipulador de OnPaint .
contexto de dispositivo é uma estrutura de dados do windows que contém informações sobre os atributos de desenho de um dispositivo como uma exibição ou uma impressora. Todas as chamadas de desenho são feitas por meio de um objeto do dispositivo contexto. Para desenhar na tela, OnDraw é transmitido para um objeto de CPaintDC . Para desenhar em uma impressora, é passado um objeto de CDC configurado para a impressora atual.
Seu código para desenhar na exibição primeiro recupera um ponteiro para o documento, então faz chamadas de desenho com o contexto do dispositivo. O exemplo simples de OnDraw ilustra o processo:
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CString s = pDoc->GetData(); // Returns a CString
CRect rect;
GetClientRect(&rect);
pDC->SetTextAlign(TA_BASELINE | TA_CENTER);
pDC->TextOut(rect.right / 2, rect.bottom / 2, s, s.GetLength());
}
Neste exemplo, você definirá a função de GetData como um membro da sua classe derivada do documento.
As cópias do exemplo de cadeia de caracteres obtém o do documento, centralizadas na exibição. Se a chamada de OnDraw é para o desenho da tela, o objeto de CDC transmitido em pDC é CPaintDC cujo construtor BeginPaintjá tiver chamado. As chamadas para desenhar funções são feitas pelo ponteiro de dispositivo contexto. Para obter informações sobre os contextos de dispositivo e das chamadas de desenho, consulte a classe CDC na Referência do MFC e em Trabalhar com objetos da janela.
Para obter mais exemplos de como escrever OnDraw, consulte MFC Exemplos.