IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Changer la resolution d'une application MFC


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 19
    Points : 23
    Points
    23
    Par défaut Changer la resolution d'une application MFC
    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()

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 386
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 386
    Points : 20 476
    Points
    20 476
    Par défaut
    Salut je ne peux pas décortiquer tout le code mais il faut peut-être faire quelque part une conversion avec ScreenToClient ou bien inversement ClientToScreen...

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/09/2008, 04h28
  2. Portage d'une application MFC sous Linux/Unix
    Par farscape dans le forum MFC
    Réponses: 29
    Dernier message: 20/02/2006, 17h47
  3. Réponses: 1
    Dernier message: 02/02/2006, 14h26
  4. [TCP/IP] Changer le port d'une application
    Par Feeder_Fan dans le forum Développement
    Réponses: 1
    Dernier message: 05/12/2005, 13h01
  5. changer class name d'une fenetre mfc
    Par pingfr dans le forum MFC
    Réponses: 2
    Dernier message: 11/07/2005, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo