J'ai une application Windows (XP) qui doit afficher un rectangle bidimensionnel dans une fenêtre. Le rectangle ne doit pas être découpé (c'est-à-dire doit toujours se trouver complètement dans la fenêtre d'affichage) et doit conserver son format d'image lors du redimensionnement. Actuellement, la méthode qui gère la disposition déforme le rapport d'aspect du rectangle pour correspondre à la fenêtre. Je veux que le rectangle soit à l'échelle de la fenêtre et soit centré dans la fenêtre (encore une fois, sans écrêtage). La méthode telle qu'elle se présente est ci-dessous. lWinDist et lMaxDepth sont la largeur et la hauteur du rectangle à afficher (en 48ths de pouce, si elle importe):Conserver le format de l'objet 2D sur le redimensionnement de la fenêtre
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) ;
}
}
Merci. Oui, ça balance bien. Malheureusement, toute la question est devenue discutable de mon côté; les pouvoirs en place ont déclaré que le rapport d'aspect doit être fixé. Je vais garder ça dans ma poche arrière de toute façon. – PSU