我有一個Windows(XP)應用程序需要在一個窗口內顯示一個二維矩形。該矩形不能被剪裁(即必須總是完全躺在視口內),並且必須保持其調整大小的縱橫比。目前,處理佈局的方法會扭曲矩形的長寬比以匹配窗口。我想要矩形縮放到窗口並居中在窗口中(再次,沒有剪輯)。現在的方法如下。 lWinDist和lMaxDepth是要被顯示的矩形的寬度和高度(在一英寸的48ths,如果它的事項):在調整窗口大小時保留二維對象的縱橫比
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) ;
}
}
謝謝。但是,雖然保持對象的縱橫比和居中,但窗口大小不會調整大小。也就是說,如果物體開始佔據窗口高度的3/4,則在調整大小後,它總是佔據窗口高度的3/4。 – PSU 2010-12-03 22:21:19
@PSU:是的,你說得對。我有一個稍微不同的版本,做了正確的事情,我會看看我是否可以把它拉起來。 – genpfault 2010-12-04 00:26:15