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


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

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

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

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

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

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

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

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

Код для рисования в представлении сначала получает указатель на объект document, затем осуществляет рисования через контекст устройства. В следующем примере 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.

См. также

Ссылки

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