Desenho em um modo de exibição
Quase todos os de desenho em seu aplicativo ocorre do modo de exibição OnDraw função de membro, você deve substituir na sua classe de modo de exibição. (A exceção é mouse desenhando, discutido no Interpretar a entrada de usuário através de um modo de exibição.) O OnDraw Substitua:
Obtém dados chamando funções de membro que você fornecer o documento.
Exibe os dados ao chamar funções de membro de um objeto de contexto de dispositivo que passa a estrutura para OnDraw.
Quando os dados do documento são alterados de alguma forma, o modo de exibição deve ser redesenhado para refletir as alterações.Normalmente, isso acontece quando o usuário fizer uma alterar através de um modo de exibição do documento.Nesse caso, o modo de exibição chama UpdateAllViewsfunção de membro para notificar todos os modos de exibição no mesmo documento para atualizar-se.UpdateAllViews chama cada modo de exibição OnUpdatefunção de membro .A implementação padrão de OnUpdate invalida toda a área de cliente o modo de exibição. Você pode substituí-la para invalidar apenas as regiões da área de cliente que mapeiam para as partes do documento modificadas.
The UpdateAllViews função de membro de classe CDocument and the OnUpdate função de membro de classe CView permitem passar informações que descrevem quais partes do documento foram modificadas. Esse mecanismo de "dica" permite limitar a área deve redesenhar o modo de exibição.OnUpdateleva dois argumentos "dica". A primeira, lHint, do tipo LPARAM, permite que você passar quaisquer dados que você gosta, enquanto a segunda, pHint, do tipo CObject*, permite que você passa um ponteiro para qualquer objeto derivado de CObject.
Quando um modo de exibição é inválido, Windows envia um WM_PAINT mensagem. OnPaint função de manipulador de responde à mensagem de criando um objeto de contexto de dispositivo de classe CPaintDC e chama OnDraw função de membro. Você normalmente não tem a escrever uma substituição OnPaint função de manipulador.
A contexto de dispositivo é uma estrutura de dados do Windows que contém informações sobre atributos de desenho de um dispositivo, sistema autônomo uma exibição ou uma impressora.Todas as chamadas de desenho são feitas por meio de um objeto de contexto de dispositivo.Para desenho na tela, OnDraw é passado um CPaintDC objeto. Para desenhar em uma impressora, ele é passado um CDC objeto definido para a impressora corrente.
Seu código para desenhar no modo de exibição primeiro recupera um ponteiro para o documento e, em seguida, faz chamadas desenho por meio do contexto de dispositivo.A seguir simples OnDraw exemplo 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ê deve definir o GetData funcionar sistema autônomo um membro de sua classe derivada de documento.
O exemplo imprime qualquer seqüência chegar do documento, centralizado no modo de exibição.Se o OnDraw telefonar é para a tela de desenho, o CDC objeto transmitido pDC é um CPaintDC cujo construtor já foi chamado BeginPaint. Chamadas a funções de desenho são feitas através de ponteiro contexto de dispositivo.Para obter informações sobre chamadas de desenho e contextos de dispositivo, consulte classe CDC in the Referência da MFC and Trabalhando com objetos de janela.
Para obter mais exemplos de como escrever OnDraw, consulte o Exemplos do MFC.