Здавалка
Главная | Обратная связь

CPoint CDC::SetWindowOrg(POINT point).



Все четыре функции в качестве параметров получают новые значения для установки начала координат, а возвращают предыдущие значения. Причем если для физической области вывода указываются координаты, которые в дальнейшем будут являться началом координат, то для логической области вывода указываются логические координаты, которые в дальнейшем будут соответствовать левому верхнему углу логической области вывода.

Из вышесказанного следует, что настраивать начало координатной сетки есть смысл только для одной из областей, т.к. система координат логической области вывода привязана к системе координат физической области. Поясним сказанное на примерах.

После настроек функции OnPaintклассов CVenusFrameи CEarthFrameбудут работать с координатной сеткой, начало координат которой располагается в середине клиентской области (рис. 4).

void CVenusFrame::OnPaint() {

CPaintDC dc(this);

CRect rect;

GetClientRect(rect);

dc.SetViewportOrg(rect.Width()/2, rect.Height(}/2);

}

void CEarthFrame::OnPaint() {

CPaintDC dc(this);

CRect rect;

GetClientRect(rect);

dc.DPtoLP(rect);

dc.SetWindowOrg(-rect.Width()/2, -rect.Height()/2);

}

В следующем примере попытка настройки систем координат обеих областей вывода в классе CMarsFrameприводит к несколько неожиданным результатам (рис. 5), так что такую последовательность, скорее всего, можно считать ошибочной.

 

void CMarsFrame::OnPaint() {

CPaintDC dc(this);

CRect rect;

GetClientRect(rect);

dc.SetViewportOrg(rect.Width()/2, rect.Height()/2);

// Вызовы следующих двух функций необходимы в случае,

// если текущий режим отличен от ММ_ТЕХТ (см. далее),

// т.к. функция SetWindowOrg работает с логическими

// координатами, а в результате преобразования из-за

// несоответствия направления осей длина и ширина области

// могут быть вычислены неверно

dc.DPtoLP(rect);

rect.NormalizeRect();

dc.SetViewportOrg(-rect.Width()/2, -rect.Height()/2);

. . .

}

Кроме начала координат, каждая из областей вывода характеризуется еще, что вполне естественно, размерами (extents), которые используются толькодоя определения коэффициента масштабирования. Коэффициент для каждой из осей находится как отношение соответствующих размеров областей вывода. Однако для большинства режимов отображения коэффициент масштабирования изменить невозможно.

Размеры области, куда будет осуществляться вывод, определяются размерами клиентской части окна.

Для настройки размеров физической области вывода используются функции:







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.