Поделиться через


Рисование в представлении

Практически весь документ в приложении происходит в функции-члене OnDraw представления, который необходимо переопределить в классе представления.(Исключением документ мыши, обсуженный в Интерпретация введенных пользователем данных через представление). Пользовательское переопределение OnDraw:

  1. Получает данные путем вызова функции-члены документа.

  2. Отображает данные путем вызова функции-члены объекта устройство-контекста, что границы передают в OnDraw.

При изменениях данных документа каким-либо способом, представление нужно повторно перетаскиваются, чтобы отразить изменения.Обычно это происходит, когда пользователь вносит изменения через представление в документе.В этом случае представление вызывает функцию-член UpdateAllViews документа, чтобы уведомить всех представлений на одном и том же документе для обновления.UpdateAllViews вызывает функцию-член OnUpdate каждого представления.Реализация по умолчанию OnUpdate делает недействительной всю клиентскую область представления.Можно переопределить его, чтобы сделать недействительными только областей клиентской области, сопоставить с измененным частям документа.

Функция-член UpdateAllViews класса CDocument и функцию-член OnUpdate класса CView позволяют передавать сведения, описывающие, какие части документа были изменены.Этот механизм «подсказки» позволяет ограничить область, представление должен перерисовывать.OnUpdate занимает 2 аргумента «подсказки».Во-первых, lHint типа LPARAM, позволяет передавать все данные желании, а второй - pHint типа CObject*, позволяет передавать указатель на объект, производный от CObject.

Если представление становится недопустимым, окна отправляют ее сообщение WM_PAINT.Функция обработчика OnPaint представления отвечает на сообщение, создав объект устройство-контекста класса CPaintDC и вызывает функцию-член OnDraw данного представления.Обычно не нужно будет написать переопределяющей функции обработчика OnPaint.

контекст устройства структура данных windows, которая содержит сведения об атрибутах документа устройства, как отображать или принтер.Все документа позвонены через объект устройство-контекста.Чтобы нарисовать на экране, OnDraw передаются в объекте CPaintDC.Для рисования на принтере, передаваемый при установке объекта CDC для текущего принтера.

Код для рисования в представлении сначала извлекает указатель на документ, а затем выполняет документа через контекст устройства.В следующем простом примере OnDraw иллюстрирует процесс:

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());
}

В этом примере определен бы функцию GetData как член данного производного класса документа.

Примере отображается любая строка возвращает из документа, по центру в представлении.Если вызов OnDraw для документа экрана, то объект CDC переданный в pDCCPaintDC конструктор которого уже вызвал BeginPaint.Для рисования функции позвонены посредством указателя устройство-контекста.Дополнительные сведения о контекстах устройства и вызовах документа см. в описании класса CDC в справочнике MFC и в разделе Работа с оконными объектами.

Дополнительные примеры, например записи OnDraw см. в разделе Примеры MFC.

См. также

Ссылки

Использование представлений