Учебник по Visual C++ .Net



             

Масштабирование изображения - часть 5


{

//========== Вызов родительской версии

CView::OnSize(nType, ex, cy) ;

if (cx==0 cy==0)

return;

//========= Запоминаем размеры окна представления

m_szView = CSize (ex, су); } ;

Проверка if (cx==0...) необходима потому, что каркас приложения вызывает OnSize несколько раз и иногда с нулевыми размерами. Обратите внимание на то, что мастер вставок добавил также и прототип (объявление) функции обработки в интерфейс класса CMyView (см. файл MyView.h):

public:

afx_msg void OnSize(UINT nType, int ex, int cy) ;

Теперь покажем, как с помощью Studio.Net следует определять в классе собственные версии виртуальных функций. Мы собираемся однократно (при открытии окна) преобразовать «мировые» координаты в логические и запомнить их. Это удобно сделать внутри виртуальной функции OnlnitialUpdate, которая унаследована от класса cview. Она вызывается каркасом приложения в тот момент, когда окно еще не появилось на экране, но уже существует его Windows-описатель (HWND) и объект класса CMyView прикреплен (attached) к окну. Напомним также, что документ имеет и поддерживает динамический список всех своих представлений.

  • В окне Class View поставьте курсор на имя класса CMyView и щелкните правой клавишей мыши.
  • Перейдите в окно Properties, щелкнув вкладку, с помощью подсказок отыщите на панели инструментов именно этого окна кнопку Overrides и нажмите ее.
  • Появится длинный список виртуальных функций родительских классов, которые можно переопределить в классе ему view. Найдите в нем функцию OnlnitialUpdate и выберите в правой половине таблицы действие <Add>.
  • Результат ищите в конце файла MyView.cpp. Внесите изменения в тело функции:

    void CMyView::OnlnitialUpdate()

    {

    CView::OnlnitialUpdate();

    // Создаем ссылку на контейнер World-координат точек

    VECPTSS pts = GetDocument()->m_Points;

    UINT size = pts.size ();

    //====== Задаем размер контейнера логических точек

    m_Points. resize (size);

    for (UINT i=0; i < size;

    m_Points[i] = (pts[i] * m_nLogZoom) .Tolnt () ;




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