3 Stimmen

Beibehaltung des Seitenverhältnisses eines 2D-Objekts bei Größenänderung des Fensters

Ich habe eine Windows-Anwendung (XP), die ein zweidimensionales Rechteck innerhalb eines Fensters anzeigen muss. Das Rechteck darf nicht beschnitten werden (d.h. es muss immer vollständig innerhalb des Ansichtsfensters liegen) und muss sein Seitenverhältnis bei der Größenänderung beibehalten. Derzeit verzerrt die Methode, die das Layout behandelt, das Seitenverhältnis des Rechtecks, um es an das Fenster anzupassen. Ich möchte, dass das Rechteck auf das Fenster skaliert und im Fenster zentriert wird (wiederum ohne Beschneidung). Die Methode, wie es steht, ist unten. lWinDist und lMaxDepth sind die Breite und Höhe des Rechtecks angezeigt werden (in 48ths von einem Zoll, wenn es darauf ankommt):

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 ) ;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X