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


Класс для просмотра изображений - часть 2


}

virtual -CRightView();

void Show(); // Демонстрация картинок

void Clear();

// Освобождение ресурсов

// Overrides public:

virtual void OnDraw(CDC* pDC) ;

protected:

virtual void OnlnitialUpdate() ;

DECLARE_MESSAGE_MAP() };

Внесите сокращения и изменения в коды реализации класса так, как показано ниже:

IMPLEMENTJDYNCREATE(CRightView, CScrollView)

BEGIN_MESSAGE_MAP(CRightView, CScrollView) END_MESSAGE_MAP()

CRightView::CRightView()() CRightView::-CRightView(){}

void CRightView::OnDraw(CDC* pDC)

{

CTreeDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

}

Полосы прокрутки автоматически появляются, когда реальные размеры окна (m_szview) становятся меньше размеров прокручиваемого окна (m_szScroll), которые надо задать в качестве аргумента функции SetScrollSizes. Если пользователь увеличил размеры окна и они стали равными или больше тех, что были указаны, то полосы автоматически исчезают. Отсюда следует, что программист должен как-то задать первоначальные размеры m_szScroll, когда еще не известны требования к ним. Обычно это делается в функции OnlnitialUpdate. Просмотрите коды этой функции, и вы увидите, какие размеры прокручиваемого окна (по умолчанию) задал мастер AppWizard. Для слежения за размерами окна представления введите в класс CRightview реакцию на сообщение WM_SI ZE, так же как вы это делали в классе CDrawView. Измените коды этой функции, а также функции OnlnitialUpdate, в которой мы приравниваем начальные размеры прокручиваемого окна к реальным:

void CRightView::OnSize(UINT nType, int ex, int cy)

{ CScrollView::OnSize(nType, ex, cy) ;

if (cx==0 || cy==0)

return;

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

m_szView = CSize (ex, cy);

}

void CRightView::OnInitialUpdate()

{

CScrollView::OnInitialUpdate();

//====== Начальные размеры окна

m_szScroll = m_szView; SetScrollSizes(MM_TEXT, m_szScroll) ;

}

Функция SetScrollSizes одновременно с размерами задает и режим преобразования координат. Самым неприятным и непонятным моментом в наследовании от класса CScrollView является то, что функция SetScrollSizes не позволяет задавать режимы MM_ISOTROPIC и MM_ANISOTROPIC, которые позволяют, как вы помните работать с формулами.


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