Иллюстрированный самоучитель по Visual Studio.Net


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


  • Фокус ввода переходит в окно редактора текста для файла MyView.cpp. Введите изменения так, чтобы функция приобрела вид:

  • void CMyView::OnSize(UINT nType, int ex, int cy)

    {

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

    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) к окну. Напомним также, что документ имеет и поддерживает динамический список всех своих представлений.

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

    Результат ищите в конце файла MyView.cpp. Внесите изменения в тело функции:

    void CMyView::OnlnitialUpdate()

    {

    CView::OnlnitialUpdate();

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

    VECPTSS pts = GetDocument()->m_Points;

    UINT size = pts.size ();



    Начало  Назад  Вперед