У меня есть приложение для Windows (XP), которое должно отображать двухмерный прямоугольник в окне.Прямоугольник не должен быть обрезан (т.е. всегда должен полностью находиться внутри области просмотра), и должен сохранять свое соотношение сторон при изменении размера.В настоящее время метод, который обрабатывает макет, искажает пропорции прямоугольника, чтобы соответствовать окну.Я хочу, чтобы прямоугольник масштабировался до окна и центрировался в окне (опять же, без обрезки).Метод в том виде, как он есть, ниже.lWinDist и lMaxDepth - это ширина и высота отображаемого прямоугольника (в 48-х дюймах, если это имеет значение):
void CRoRRecView::RedoLayout( long lWinDist, long lMaxDepth )
{
CDC* pDC = GetDC() ;
if ( pDC != NULL )
{
m_lWinDist = lWinDist;
GetClientRect( m_rectClient ) ;
int nClientWidth = m_rectClient.Width();
int nClientHeight = m_rectClient.Height();
glViewport( 0, 0, nClientWidth, nClientHeight );
glMatrixMode( GL_PROJECTION);
glLoadIdentity();
m_fWinXDist = (float) lWinDist ;
m_fWinYDist = lMaxDepth ;
m_fAspectRatio = m_fWinXDist / m_fWinYDist;
glOrtho(0.0, m_fWinXDist, 0.0, m_fWinYDist, -1, 1 ) ;
glRotatef(180.0, 0,1,0);
glTranslatef( (float)(-1 * lWinDist),0,0 ); // Translate across the x axis
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
ReleaseDC( pDC ) ;
}
}