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 :

Modifier la taille d'un Edit en fonction du texte


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut Modifier la taille d'un Edit en fonction du texte
    Bonjour,

    Je suis entrain de créer un petit éditeur graphique avec la saisie de texte à la volée.

    Mais je voudrais que la taille de mon édit change en fonction du contenu de l'edit.

    j'ai commencé à faire ça :
    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
     
     
    void CGEEditInline::OnChange() 
    {
    	DWORD dwMargins = GetMargins ( );
    	WORD wMarginLeft  = LOWORD ( dwMargins );
    	WORD wMarginRight = HIWORD ( dwMargins );
     
    	CRect rcClient; GetClientRect ( &rcClient );
     
     
    	CString sLine;      
    	int nLineLenght = LineLength ( 0 ); 
    	GetLine ( 0, sLine.GetBuffer ( nLineLenght ), nLineLenght );
     
     
    	int nMode = GetDC ( )->SetMapMode ( MM_TEXT );
    	CSize szSize = GetDC ( )->GetOutputTextExtent ( sLine );
    	GetDC ( )->SetMapMode ( nMode );
     
    	if ( wMarginLeft + szSize.cx + wMarginRight > rcClient.Width ( ) )
    	{
    		ASSERT ( FALSE );
    	}
    }
    Mais ce que je ne comprend pas dans le code que j'ai mis audessus c'est que le "GetOutputTextExtent" me retourne toujours une taille "cx=0 et cy=0".
    J'ai même tenté avec le "GetTextExtent" et c'est pareil.

    J'ai même vérifier que le font était correcte et effectivement elle est correct.

    Donc je ne sais plus quoi faire.
    Si quelqu'un à un idée pour résoudre mon problème de taille ou carrement de redimmensionnement de l'édit, je suis preneur.

    Merci d'avance.

  2. #2
    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
    Par défaut
    salut,
    plusieurs erreurs dans ton code :
    un appel à GetDC doit etre relaché par ReleaseDC.
    ce qui n'est pas le cas dans ton code puisque tu appels plusieurs fois GetDC...
    ensuite je ne suis pas sur que la fonte soit selectionnée ,à verifier apres avoir corrigé l'utilisation de GetDC.
    corrige déjà tout ça apres on voit...

  3. #3
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Je viens de modifier mon code pour ajouter le ReleaseDC

    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
     
     
    void CGEEditInline::OnChange() 
    {
    	DWORD dwMargins = GetMargins ( );
    	WORD wMarginLeft  = LOWORD ( dwMargins );
    	WORD wMarginRight = HIWORD ( dwMargins );
     
    	CRect rcClient; GetClientRect ( &rcClient );
     
     
    	CString sLine;      
    	int nLineLenght = LineLength ( 0 ); 
    	GetLine ( 0, sLine.GetBuffer ( nLineLenght ), nLineLenght );
     
    	CDC * pDC = GetDC ( );
     
    	int nMode = pDC->SetMapMode ( MM_TEXT );
    	CSize szSize = pDC->GetOutputTextExtent ( sLine );
    	pDC->SetMapMode ( nMode );
     
    	if ( wMarginLeft + szSize.cx + wMarginRight > rcClient.Width ( ) )
    	{
    		ASSERT ( FALSE );
    	}
     
    	ReleaseDC ( pDC );
    }
    Mais cela ne change rien au problème. Dommage

    Sinon pour la font, j'ai bien vérifié et c'est bon voici ce que j'ai dans mon LOGFONT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	lfHeight		-8
    	lfWidth			0
    	lfEscapement		0
    	lfOrientation		0
    	lfWeight		400
    	lfItalic		0 ''
    	lfUnderline		0 ''
    	lfStrikeOut		0 ''
    	lfCharSet		0 ''
    	lfOutPrecision		0 ''
    	lfClipPrecision		0 ''
    	lfQuality		0 ''
    	lfPitchAndFamily	0 ''
    	lfFaceName		0x0012fa90 "MS Sans Serif"

  4. #4
    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
    Par défaut
    tu es sur de ton GetLine et donc du contenu de sline ?
    pourquoi ne pas faire un simple GetWindowText ....
    le setmapmode est inutile a mon avis.


  5. #5
    Membre éclairé Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Par défaut
    Ok je note pour SetMapMode.
    Par contre, je veux calculer taille exactement de l'edit en fonction de toutes les lignes. Car l'edit peut être multiligne.

    Le code que j'ai donné correspond à la première version, version simplifié.

  6. #6
    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
    Par défaut
    et donc szSize est vide ?
    dans ce cas fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CFont *poldFont=pDC->SelectObjet(GetFont());
    CSize szSize = pDC->GetTextExtent ( sLine );
    pDC->SelectObjet(poldFont);

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/03/2011, 09h12
  2. Réponses: 5
    Dernier message: 20/08/2009, 10h36
  3. Réponses: 5
    Dernier message: 24/04/2008, 09h53
  4. Modifier la taille d'un élément en fonction de la resolution
    Par kstou2001 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/12/2007, 23h38
  5. Réponses: 5
    Dernier message: 27/11/2002, 14h08

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