Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT



         

Многооконный графический редактор - часть 2


Затем добавляем к документу новый элемент, определяющий координаты верхнего левого угла квадрата. В данном случае графический документ приложения представляется массивом pointFigCenter, содержащим объекты класса CPoint.

Так как метод OnLButtonDown изменяет документ, устанавливаем флаг модификации документа, для чего вызываем метод SetModifiedFlag. Затем вызываем метод OnLButtonDown базового класса CView. На этом обработка сообщения завершается.

Приложение должно отображать документ, когда в окно просмотра поступает сообщение WM_PAINT. Для этого следует изменить метод OnDraw окна просмотра документа. MFC AppWizard определяет шаблон этого метода, вам остается только “наполнить” готовый шаблон.

Метод OnDraw должен уметь отображать документ в любой момент времени. Так как документ записан в массиве pointFigCenter класса документа, сначала надо определить указатель на документ, а потом последовательно отобразить на экране все его элементы:

//////////////////////////////////////////////////////////////

// CMultiView drawing

void CMultiView::OnDraw(CDC* pDC)

{

   CMultiDoc* pDoc = GetDocument();

   ASSERT_VALID(pDoc);

   int i;

   for (i=0; i<pDoc->pointFigCenter.GetSize(); i++)

      pDC->Rectangle(

         pDoc->pointFigCenter[i].x-10,

         pDoc->pointFigCenter[i].y-10,

         pDoc->pointFigCenter[i].x+10,

         pDoc->pointFigCenter[i].y+10

      );

}

Переопределите метод DeleteContents класса CMultiDoc так, чтобы он удалял содержимое документа. Для этого достаточно удалить все элементы массива pointFigCenter, воспользовавшись методом RemoveAll класса CArray. После очистки документа необходимо вызвать метод DeleteContents базового класса CDocument.

Чтобы вставить в класс CMultiDoc метод DeleteContents используйте MFC ClassWizard, а затем модифицируйте его в соответствии со следующим фрагментом кода:

//////////////////////////////////////////////////////////////

// CMultiDoc commands

void CMultiDoc::DeleteContents()




Содержание  Назад  Вперед