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); . . . }
Размеры области, куда будет осуществляться вывод, определяются размерами клиентской части окна. Для настройки размеров физической области вывода используются функции: ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|