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 :

[Win32] Utilisation de AddFontMemResourceEx [FAQ]


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par d�faut [Win32] Utilisation de AddFontMemResourceEx
    Je veux inclure dans mon programme une police sp�cifique (TTF).

    Je l'ai donc mise en ressources et utilise le code suivant pour y acc�der :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    	HRSRC hRes   = FindResource(NULL, MAKEINTRESOURCE(IDR_FONT), _T("TTF"));
    	PVOID lpFont = LockResource(LoadResource(NULL, hRes)); 
    	DWORD dwSize = SizeofResource(NULL, hRes), cFonts = 0;
    		  m_hFont = AddFontMemResourceEx(lpFont, dwSize, NULL, &cFonts);
    Le probl�me, c'est que quand j'essaye de dessiner avec m_hFont, �a ne marche pas, le syst�me utilise la police par d�faut � la place.

    Alors je comprends pas si ce que retourne AddFontMemResourceEx est bien un HFONT ? Ou est-ce que c'est un autre type de handle ? Si oui, comment on acc�de � la police vu qu'elle n'est pas �num�rable (cf MSDN) ??

  2. #2
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    j'essayerais bien
    cFonts = 1

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par d�faut
    Ca ne change rien

    Je pr�cise � tout hasard que j'utilise �a pour dessiner (�a marche si j'utilise CreateFont, mais l� �a utilise la police par d�faut)

    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
    void CPopupWnd::OnPaint()
    {
    	CPaintDC dc(this);
     
    	if(m_Item)
    	{
    		CRect Rect; GetClientRect(Rect);
    		// Texte à dessiner (sur plusieurs lignes)
    		CString Text = m_Item->GetCharacs();
    		// Création de la police utilisée
    		CFont * pFont = CFont::FromHandle(HFONT(theApp.m_hFont));
    		CFont * pOldFont = dc.SelectObject(pFont);
    		// Calcul de la taille du rectangle nécessaire
    		VERIFY(dc.DrawText(Text, Rect, DT_CALCRECT));
    		// Modification de la taille de la fenêtre
    		VERIFY(SetWindowPos(NULL, 0, 0, Rect.right-Rect.left, Rect.bottom-Rect.top, 
    			SWP_NOZORDER | SWP_NOMOVE));
    		dc.SetBkMode(TRANSPARENT);
    		// Dessin du texte
    		VERIFY(dc.DrawText(Text, Rect, DT_LEFT | DT_TOP | DT_WORDBREAK));
    		dc.SelectObject(pOldFont);
    	}
    }

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    Est ce que tu as v�rifie les valeurs de retour de chaque fonction ?

    d'autre part, il faudrait peur etre essayer

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    FindResource(NULL, MAKEINTRESOURCE(IDR_FONT),RT_FONT) ;

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par d�faut
    oui oui la ressource est trouv�e, charg�e, et la fonction semble installer la police correctement. Le truc, c'est que j'ai pas l'impression que le handle qu'elle me renvoie soit un HFONT...

    Enfin je sais pas trop parce que FromHandle me renvoie bien un pointeur qui n'est pas nul...

    J'y comprends rien l�

  6. #6
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    la doc de AddFontMemResourceExrenvoi � SendMessage, je me demande si un WM_FONTCHANGE ne ferait pas du bien

  7. #7
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par d�faut
    J'ai essay� �a pour voir :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    	CFont * Font = CFont::FromHandle(HFONT(theApp.m_hFont));
    	VERIFY(Font->GetLogFont(&LogFont));
    Et l'assertion �choue ! Le handle que me renvoie la fonction n'est pas un HFONT ! Et je sais pas ce que c'est lol, ils disent juste que �a identifie la police de mani�re unique...

  8. #8
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    la, je suis sec. j'ai fait du MSDN et du google sur AddFontMemResourceEx, mais � part un site russe, j'ai rien vu


    bon courage

  9. #9
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par d�faut
    :trouve: Sur les forums de Codeguru (c'est vrai que google est pas fort sur ce coup-l�)

    Donc apr�s avoir install� la police il faut utiliser CreatePointFont !

    Franchement ils pourraient le mentionner sur MSDN, c'est abus� !

    Exemple de code pour ceux qui pourraient avoir le m�me probl�me (�a pourrait peut �tre rentrer dans la FAQ non, dans "Comment utiliser une police en ressources" ?)

    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
     
    	// Installe la police 
     
    	HRSRC hRes   = FindResource(NULL, MAKEINTRESOURCE(IDR_FONT), _T("TTF"));
    	PVOID lpFont = LockResource(LoadResource(NULL, hRes)); 
    	DWORD dwSize = SizeofResource(NULL, hRes), cFonts = 0;
    	HANDLE hFont = AddFontMemResourceEx(lpFont, dwSize, NULL, &cFonts);
    	ASSERT(cFonts > 0);
     
    	// Crée la police
     
    	CFont Font;
    	VERIFY(Font.CreatePointFont(110, _T("NomDeLaPolice")));
     
    	// ... Utilisation
     
    	// Désinstalle la police
     
    	VERIFY(RemoveFontMemResourceEx(hFont));
    Merci quand m�me bjousse de m'avoir aid�

  10. #10
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par d�faut
    de rien, ca m'amuse, je ne programme plus windows que rarement et c'est rigolo d'essayer de se rappeler comment on a r�gl� certaines m.... 7 ou 8 ans plus tot (voire plus....)

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

Discussions similaires

  1. R�ponses: 1
    Dernier message: 12/02/2007, 10h19
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    R�ponses: 8
    Dernier message: 08/06/2005, 15h57
  3. Quel format : coff ou win32 utiliser pour le .o
    Par Guillaume_2357 dans le forum x86 32-bits / 64-bits
    R�ponses: 1
    Dernier message: 13/04/2005, 13h14
  4. R�ponses: 15
    Dernier message: 22/03/2005, 14h45
  5. utilisation composant delphi 7 win32 avec delphi 2005
    Par chtiot dans le forum Composants VCL
    R�ponses: 3
    Dernier message: 18/02/2005, 06h49

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