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


Развитие класса документа - часть 4


В коде этой функции мы помещаем центр симметрии фигуры (точку с координатами

CDPoint(0,0)) в центр логической области, отведенной для документа, увеличиваем координаты и преобразуем их к целому типу:

CPoint CTreeDoc::MapToLogPt(CDPointS pt) {

{

//====== Растяжение и сдвиг

int x = m_szDoc.cx/2 +

int(m_nLogZoom * pt.x), у = m_szDoc.cy/2 +

int(m_nLogZoom * pt.y);

return CPoint(x,y);

+}

Введите также функцию обратного преобразования координат, которая, получив на входе точку с целыми координатами в пространстве Page, вычисляет соответствующую ей точку с вещественными координатами в пространстве World:

CDPoint CTreeDoc::MapToWorldPt(CPointS pt)

{

//====== Обратные операции

double x = double(pt.x - m_szDoc.cx/2) / m_nLogZoom,

у = double(pt.y - m_szDoc.cy/2) / m_nLogZoom;

return CDPoint(x, y);

}

В настоящий момент, если закомментировать вызовы FreeDocs и ProcessDocs в теле деструктора и функции OnSelchanged класса CLef tview, то вы можете запустить приложение, с тем чтобы устранить возможные ошибки. Но пока никакой новой функциональности оно не обнаружит, так как мы еще не занимались созданием и управлением других представлений его документа. Нам вновь придется вернуться к классу документ, но только после того, как будут разработаны классы связанных с ним представлений.




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