Changer le Font d'un dialog

cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009 - 13 août 2004 à 22:48
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 - 5 sept. 2004 à 08:19
Les Fonts 'en général' n'étant pas redistribuables, je veux utiliser un Font que j'ai ajouté en ressource (et qui ne se trouve pas dans Windows/Fonts). Un Font par défaut est utiliser dans une CView ou un CDialog.
Comment faire pour charger la police que je veux ?

CFont *pFont;
pFont = new CFont;
VERIFY(pFont->CreateFont(
40,
7,
0,
0,
FW_NORMAL,
FALSE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS | FF_SCRIPT | FF_DECORATIVE,
MAKEINTRESOURCE(IDR_MONFONT));

Mondlg.SetFont(pFont);

Ce code ne marche pas (ou j'oublie un truc) ?!

3 réponses

Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
25 août 2004 à 12:19
Je vais te dire quelque chose, abandonne l'idée de charger une fonte directement comme tu le fais parce que je crois que c'est tout simplement impossibler comme çà . Essaye par exemple de sauvegarder la fonte sur disque puis de l'installer(il existe une fonction pour çà) et ensuite tu énumère toute les fonte installée(il existe une fonction pour çà) jusqu'à trouver la tienne .
0
cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
4 sept. 2004 à 23:08
Oui je crois que c'est la solution à condition de créer ma propre Fonte et de l'installer sur le disque - à moins de trouver des fontes archi-libres de droits.

Merci quand même.
0
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
5 sept. 2004 à 08:19
non tu n'a pas tout à fait compris ce que j'ai dis : pour utiliser, une fonte doit être(virtuellement) installé et il existe des
fonctions pour çà :

Voilà comment on fait(à mon avis):
->tu met la fonte en tant que ressource quand tu compile .
->Quand ton prog démarre tu récupère un pointeur dessus en appelant succécivement FindResource, puis LoadResource et enfin LockResource

->tu appel AddFontMemResourceEx avec le pointeur obtenu et la taille est obtenu avec la fonction SizeofResource .

->ensuite, tu appel CreateFont et comme nom, tu met celui de ta fonte qui est maintenant installé

main.h
........
#define MY_FONT    101
.......


main.rc
......
MY_FONT FONT "c:\path\nom.extension"
.....


main.cpp
......
HFONT LoadFont()
{
    HMODULE hModule=LoadLibrary("c:\path\nom.exe");
    HRSRC hRsrc=FindResource(hModule, (LPTSTR)MY_FONT,
             RT_FONT);
     HGLOBAL hGlobal=LoadResource(hModule,hRsrc);
     LPVOID lpVoid=LockResource(hGlobal);
     DWORD dwSize=SizeofResource(hModule,hRsrc);

     DWORD numFont;//
     AddFontMemResourceEx(lpVoid,dwSize,(LPVOID)0,&numFont);

     return CreateFont(
            40,
            7,
            0,
            0,
            FW_NORMAL,
            FALSE,
            FALSE,
            0,
            ANSI_CHARSET,
            OUT_DEFAULT_PRECIS, 
            CLIP_DEFAULT_PRECIS, 
            DEFAULT_QUALITY, 
            DEFAULT_PITCH|FF_SWISS|FF_SCRIPT|FF_DECORATIVE,
            "nom");
}
.....


Bien sur ceci n'utilise pas les MFC mais il doit bien y avoir une conversion possible ou alors tu envoie directement le message par SendMessage . Je pense que ce code marche mais j'ai pas testé .
Bien sûr il faut remplacer le nom de l'exe et celui de la font par les tiens .
0
Rejoignez-nous