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 :

Conversion de pixels pour le calcul de la longueur d'1 champ


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 48
    Points : 46
    Points
    46
    Par défaut Conversion de pixels pour le calcul de la longueur d'1 champ
    Bonjour,

    Je dois ajuster la taille d'un champ CStatic en fonction du texte que j'y mets à l'intérieur. Pour connaître la taille de mon texte, j'utilise la fonction GetTextExtendPoint32 qui me rend la taille en pixels. De là, j'essaie de convertir ces pixels en CRect pour l'affichage du CStatic à la taille du texte. Mais ça ne marche pas!!! Est-ce que je m'y prends bien? Dois-je utiliser une autre méthode?

    Merci pour vos idées,
    Hugues

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Disons que GetTextExtentPoint32 te donne la taille, mais tu n'as pas la position...

    Je ne sais pas si tu as déjà la position du CStatic par ailleurs, mais si ce n'est pas le cas, un des moyens de l'obtenir est MapWindowPoints()...

  3. #3
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 48
    Points : 46
    Points
    46
    Par défaut Conversion de pixels pour le calcul de la longueur d'1 champ
    Pour la position du CStatic, j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CRect rec;
    MonStatic->GetWindowRect(&rec);
    MonStatic->ScreenToClient(&rec);
     
    //la taille de mon message en pixels dans sz
    Size sz;
    ::GetTextExtentPoint32(dc.GetSafeHdc(), m_msg, m_msg.GetLength(), &sz);
     
    //ensuite, j'ai essayé ceci (mais la conversion n'est pas bonne!)
    rec.Rigth= sz.cx;
     
    MonStatic->MoveWindow(&rec);
    Merci,
    Hugues

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonStatic->GetWindowRect(&rec);
    MonStatic->ScreenToClient(&rec);
    Pour ton CStatic, ceci équivaut à un GetClientRect(), car tu demande au CStatic de se positionner par rapport à lui-même. Ce qu'il te faut, c'est sa position par rapport à la boite de dialogue.

    Bref, il te faut utiliser la CWnd qui contient le static au lieu du static lui-même pour appeler ScreenToClient().[/code]

  5. #5
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 48
    Points : 46
    Points
    46
    Par défaut Conversion de pixels pour le calcul de la longueur d'1 champ
    C'est ce que je fais, pardon. J'ai mal recopié mon code....Je crois que le problème vient au niveau de la conversion des pixels vers le CRect...

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu peux faire un copier-coller exact de ta portion de code ?

    Au fait, j'ai vu une autre erreur, il faut un rec.Right = rec.Left + sz.cx

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    j'arrive apres la guerre lol:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //rec.Rigth= sz.cx; 
    rec.Rigth=rec.Left+sz.cx;
    la cordonnée right doit tenir compte du depart : left....
    il faudra rajouter un chouilla pour l'epaisseur .
    on peut l'obtenir en faisant la difference des rectangles sur la largeur (.Width())entre un GetWindowRect et GetClientRect .
    [edit]
    mince j'avais pas vu la reponse de médinoc lol !
    [/edit]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/04/2007, 15h33
  2. [Conversion]Comment faire pour couper un Double trop long?
    Par dessinateurttuyen dans le forum Général Java
    Réponses: 1
    Dernier message: 13/11/2005, 02h22
  3. Quelle taille en pixels pour une animation d'un site web?
    Par ned-flanders dans le forum Flash
    Réponses: 6
    Dernier message: 06/10/2005, 11h26
  4. Modifier le codage des pixels pour capture vidéo
    Par supergrey dans le forum DirectX
    Réponses: 10
    Dernier message: 27/08/2005, 10h48
  5. Méthode pour du calcul partagé (urgent...)
    Par cedricB dans le forum CORBA
    Réponses: 8
    Dernier message: 24/01/2005, 19h59

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