Bonjour.

visual 2008
xp pack 2

J'ai une application MFC et j'aimerais que cette application ai plusieurs r�solution. La r�solution standard que j'ai choisi est 1280 par 1024. J'aimerais pouvoir la passer en 1024 par 768.
Pour cela j'ai fait une fonction qui me calcul le ratio entre les deux r�solution et apr�s j'utilise des moveWindow pour redimensionner et d�placer mes objets. Mais le probl�me c'est que mes objets (des fen�tres fille) sont tous d�cal�s. Je ne sais pas quelle r�f�rence est prise pour la position (coin haut gauche de l'�cran, coin haut gauche de la fen�tre parent...) quand je suis sur une fen�tre fille.

J'appelle ma fonction � la fin de chaque OnInitDialog des fen�tres

Voici ma fonction :

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
void AdapterTailleSuivantResolution()
{
  float f_CoeffXMultiplicateur;
  float f_CoeffYMultiplicateur;
  float cx;
  float cy;
 
  //récupération de la résolution (x et y) en cours
  cx = (float)m_p_ConfigurationManager->getCxCible();
  cy = (float)m_p_ConfigurationManager->getCyCible();
 
  //Calcul des coefficients multiplicateur
  f_CoeffXMultiplicateur = cx/m_p_ConfigurationManager->getCxStandard();
  f_CoeffYMultiplicateur = cy/m_p_ConfigurationManager->getCyStandard();
 
  //Si la résolution en cours est inférieur à la résolution 
  //standard (1280*1024) on applique les coefficients à la  
  //taille et à la position de tous les éléments de la fenêtre
  if ((cx < m_p_ConfigurationManager->getCxStandard() || cy < m_p_ConfigurationManager->getCyStandard()))
  {
    POINT coinHGArriveeFenetre;
    CRect rectFenetre;
 
    this->GetWindowRect(&rectFenetre);
 
    //traitement pour la fenetre
    int i_hauteurFenetreDepart = rectFenetre.Height();
    int i_largeurFenetreDepart = rectFenetre.Width();
    int i_hauteurFenetreArrivee = (int)(i_hauteurFenetreDepart*f_CoeffYMultiplicateur);
    int i_largeurFenetreArrivee = (int)(i_largeurFenetreDepart*f_CoeffXMultiplicateur);
 
    coinHGArriveeFenetre.x = (LONG)(rectFenetre.left*f_CoeffXMultiplicateur);
    coinHGArriveeFenetre.y = (LONG)(rectFenetre.top*f_CoeffYMultiplicateur);
 
    this->MoveWindow(coinHGArriveeFenetre.x,coinHGArriveeFenetre.y,i_largeurFenetreArrivee,i_hauteurFenetreArrivee,TRUE);
 
    //Récupération de tous les éléments de la fenêtre
    CWnd *pCtrl=this->GetWindow(GW_CHILD);   
    while(pCtrl)   
    {    
      CRect rect;
      //pCtrl->GetClientRect(&rect);
      pCtrl->GetWindowRect(&rect);
      POINT coinHGDepart;
      POINT coinHGArrivee;
      int i_hauteurDepart;
      int i_largeurDepart;
      int i_hauteurArrivee;
      int i_largeurArrivee;
 
      //traitement pour les éléments de la fenêtre
      i_hauteurDepart = rect.Height();
      i_largeurDepart = rect.Width();
      coinHGDepart.x = rect.left;
      coinHGDepart.y = rect.top;
 
      i_largeurArrivee = (int)(i_largeurDepart*f_CoeffXMultiplicateur);
      i_hauteurArrivee = (int)(i_hauteurDepart*f_CoeffYMultiplicateur);
 
      coinHGArrivee.x = (LONG)((coinHGDepart.x)*f_CoeffXMultiplicateur);
      coinHGArrivee.y = (LONG)((coinHGDepart.y)*f_CoeffYMultiplicateur);
 
      pCtrl->MoveWindow(coinHGArrivee.x,coinHGArrivee.y,i_largeurArrivee,i_hauteurArrivee);
 
      //pCtrl->SetWindowPos(pCtrl,coinHGArrivee.x,coinHGArrivee.y,i_largeurArrivee,i_hauteurArrivee,SWP_SHOWWINDOW);
 
      //pCtrl->RedrawWindow();
 
      pCtrl = pCtrl->GetWindow(GW_HWNDNEXT);
    }//Fin while(pCtrl)  
 
    //this->SetWindowPos(this,coinHGArriveeFenetre.x,coinHGArriveeFenetre.y,i_largeurFenetreArrivee,i_hauteurFenetreArrivee,SWP_SHOWWINDOW);
 
    this->RedrawWindow();
  }
  else
  {
    //Ne rien faire
  }//Fin if 
}//Fin fonction AdapterTailleSuivantResolution()