Bonjour.
Je dispose d'une application contenant deux splitters: un horizontal et un vertical séparant la partie du haut en 2.

Dans la CView située en haut à droite, je crée un scène OpenGL dans laquelle je charge une image TGA en tant que texture pour l'afficher.
L'affichage est là, mais l'image est complètement déformée.

Le plus étrange, c'est qu'une de mes autres applications réalise la même opération, mais sans les splitters. Et là, l'affichage est correct.

Dans les deux applications, j'ai créé une fonction de calcul des coefficients d'affichage de ma scène OpenGL:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
//Calcul des coefficients de hauteur et de largeur
//pour afficher l'image aux bonnes proportions dans la fenêtre
//Si la largeur de l'image est strictement supérieure à sa longueur
if( largeurText>hauteurText )
{
    if( largeurText>ZoneClient.right )
    {
        //Si la hauteur de l'image, recalculée avec la ratio
        //'Largeur de l'image/Largeur de la zone client' est
        //inférieure à la hauteur de la zone client
        if(     hauteurText/((float)largeurText/ZoneClient.right)<ZoneClient.bottom )
        {	coeffLargeur = 0;       coeffHauteur=1-(hauteurText/((float)largeurText/ZoneClient.right))/ZoneClient.bottom;		}
        else
        {	coeffLargeur = 1-(largeurText/((float)hauteurText/ZoneClient.bottom))/ZoneClient.right;
                 coeffHauteur = 0;	}
        }
        else
        {
             //Si l'image a ses dimensions inférieures
             //ou égales à celle de la zone client
             if( hauteurText<=ZoneClient.bottom )
             {
                  coeffLargeur = 1-(float)largeurText/ZoneClient.right;
                  coeffHauteur = 1-(float)hauteurText/ZoneClient.bottom;
             }
             //Si seule la hauteur de l'image est
             //supérieure à celle de la zone client
             else
             {
                   coeffLargeur = 1-(largeurText/((float)hauteurText/ZoneClient.bottom))/ZoneClient.right;
                   coeffHauteur = 0;
              }
        }
}
//Sinon (si la hauteur de l'image est supérieure ou égale à sa longueur)
else
{
	if( hauteurText>ZoneClient.bottom )
	{
		//Si la largeur de l'image, recalculée avec la ratio
		//'Hauteur de l'image/Hauteur de la zone client' est
		//inférieure à la largeur de la zone client
		if( largeurText/((float)hauteurText/ZoneClient.bottom)<ZoneClient.right )
		{	coeffLargeur = 1-(largeurText/((float)hauteurText/ZoneClient.bottom))/ZoneClient.right;
			coeffHauteur = 0;	}
		else
		{	coeffLargeur = 0;
			coeffHauteur =(hauteurText/((float)largeurText/ZoneClient.right))/ZoneClient.bottom;		                 }
	}
	else
	{
              //Si l'image a ses dimensions inférieures
             //ou égales à celle de la zone client
             if( largeurText<=ZoneClient.right )
             {
                  coeffLargeur = 1-(float)largeurText/ZoneClient.right;
                  coeffHauteur = 1-(float)hauteurText/ZoneClient.bottom;
              }
              //Si seule la largeur de l'image est
              //supérieure à celle de la zone client
              else
              {
                  coeffLargeur = 0;
                  coeffHauteur = (hauteurText/((float)largeurText/ZoneClient.right))/ZoneClient.bottom;
               }
         }
}
 
 
		//Affichage de l'image
                glPushMatrix();
                     glBegin(GL_QUADS);
                         glTexCoord2f(0.0, 1.0);
                         glVertex2f(-1.0+coeffLargeur, -1.0+coeffHauteur);
 
                         glTexCoord2f(0.0, 0.0);
                         glVertex2f(-1.0+coeffLargeur, 1.0-coeffHauteur);
 
                         glTexCoord2f(1.0, 0.0);
                         glVertex2f(1.0-coeffLargeur, 1.0-coeffHauteur);
 
                         glTexCoord2f(1.0, 1.0);
                         glVertex2f(1.0-coeffLargeur, -1.0+coeffHauteur);
                    glEnd();
                glPopMatrix ();
                SwapBuffers (hDC);
Le plus bizarre est donc que l'affichage marche (l'image est aux bonne proportions) dans l'aplpication SDI sans splitters.
Par contre il est incorect (image déformée) dans l'aplication SDI avec les splitters.