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 :

[MFC] label avec une police qui s'ajuste


Sujet :

MFC

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut [MFC] label avec une police qui s'ajuste
    Bonjour,

    je souhaite cr�er un label (Cstatic) dont la taille de la police diminue si le texte ne tient pas dans le rectangle d'affichage.
    Donc j'ai d�riv� un CStatic dont j'ai surcharg� la fonction d'affichage OnPaint() comme ceci :

    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
     
    LOGFONT        lf;
     
     
     
    GetLogFont(lf); // Get Current font properties
     
     
    ::GetTextExtentPoint32(pDCMem->GetSafeHdc(), csText, csText.GetLength(), &sz);
     
    if ( sz.cx > pRect->Width() ){
    lf.lfHeight -= 1;  // diminue font size
    SetFont( &lf );
     
    }
    else{
    }
    pDCMem->DrawText(csText, pRect, dwFlags);
    Ce code fonctionne bien par contre j'aimerais reaugmenter la taille au fur et a mesure que le texte diminue.

    J'ai essay� de remplir le else comme ca :

    else{
    if (lf.lfHeight < nTailleInitial)
    lf.lfHeight += 1; // augmente font size
    SetFont( &lf );
    }

    mais j'obtiens une espece d'oscillation d'affichage.

  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,
    moi je ferais le test de taille de fonte sur le message de changement de texte
    hormis la premiere fois :
    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
     
    BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
    	//{{AFX_MSG_MAP(CMyStatic)
    		// NOTE - the ClassWizard will add and remove mapping macros here.
    	//}}AFX_MSG_MAP
    ON_MESSAGE(WM_SETTEXT ,OnSetText)
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    LRESULT CMyStatic::OnSetText(UINT wParam, LONG lParam)
    {
    	LPCTSTR lpsz;
    	lpsz=(LPCTSTR)lParam; // chaine correspondant a SetWindowText
    // traitement de test sur la fonte ici et changement de fonte eventuel .
     
    	return Default();
    }

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut
    Citation Envoy� par farscape
    salut,
    moi je ferais le test de taille de fonte sur le message de changement de texte
    hormis la premiere fois :
    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
     
    BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
    	//{{AFX_MSG_MAP(CMyStatic)
    		// NOTE - the ClassWizard will add and remove mapping macros here.
    	//}}AFX_MSG_MAP
    ON_MESSAGE(WM_SETTEXT ,OnSetText)
    END_MESSAGE_MAP()
    /////////////////////////////////////////////////////////////////////////////
    LRESULT CMyStatic::OnSetText(UINT wParam, LONG lParam)
    {
    	LPCTSTR lpsz;
    	lpsz=(LPCTSTR)lParam; // chaine correspondant a SetWindowText
    // traitement de test sur la fonte ici et changement de fonte eventuel .
     
    	return Default();
    }
    Ok mais dans ton OnSetText comment recuperes tu le DC courant

  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
    avec un

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut
    Citation Envoy� par farscape
    avec un
    Juste un detail auquel je pense OnSetText n'est appel� que lors d'un UpdateData et je n'utilise jamais cette fonction.

  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
    OnSetText est appel� sur un SetWindowtText .
    et updatedata finis par faire un SetWindowtText .

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut
    Citation Envoy� par farscape
    OnSetText est appel� sur un SetWindowtText .
    et updatedata finis par faire un SetWindowtText .
    Le probleme est que je surcharge SetWindowText et que je n'appelle pas le SetWindowText par defaut pour reduire le "flickering". Je vais peut etre l'enlver et essayer tes suggestions.

  8. #8
    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,
    moi j'ai fais �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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    LRESULT CMyStatic::OnSetText(UINT wParam, LONG lParam)
    {
    	LPCTSTR lpsz;
    	lpsz=(LPCTSTR)lParam;
     
    	CRect Rect;
    	LOGFONT    lf;
     
    	GetClientRect(&Rect);
    	if(!m_Font.m_hObject) // m_font c'est l'objet CFontEx de la faq
    	{
    		m_Font.GetFont(15,"Arial");
    		SetFont(&m_Font,FALSE);
    	}
     
    	CClientDC dc(this);
    	m_Font.GetLogFont(&lf); // Get Current font properties
     
    	do
    	{
    		SIZE sz;
    		::GetTextExtentPoint32(dc.GetSafeHdc(), lpsz, strlen(lpsz), &sz);
    		if( sz.cx > Rect.Width())
    		{
    			if(lf.lfHeight<0) lf.lfHeight ++;  // diminue font size		
    			else			  lf.lfHeight --;  // diminue font size		
     
    			m_Font.DeleteObject();
    			m_Font.CreateFontIndirect(&lf);
    			dc.SelectObject(&m_Font);
    			continue;
    		} 
    		break;
    	}
    	while(1);
    	SetFont( &m_Font,FALSE);
    	return Default();
    }
    a adpater

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    R�ponses: 3
    Dernier message: 29/04/2006, 14h19
  2. [VBA-E]Erreur avec une combobox qui liste le contenu de cell
    Par Tartenpion dans le forum Macros et VBA Excel
    R�ponses: 3
    Dernier message: 08/03/2006, 12h01
  3. [9i] PLS-00320 avec une fonction qui renvoi un curseur
    Par hoaxpunk dans le forum Oracle
    R�ponses: 5
    Dernier message: 09/02/2006, 17h04
  4. PB avec une CComboBox qui vaut 0x00000000 !!
    Par chaser_T dans le forum MFC
    R�ponses: 1
    Dernier message: 29/12/2005, 18h29
  5. R�ponses: 4
    Dernier message: 04/03/2005, 11h56

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