ECRITURE FICHIER LOGFONT [Résolu]

Signaler
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
-
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
-
Bonjour

dans mon application, j'utilise un fenêtre de dialogue de sélection de police d'écriture :

VOID SelectMainFont(HWND hwnd, HWND hRichEdit)
{
   ZeroMemory(&lf, sizeof(LOGFONT));
   lstrcpy(lf.lfFaceName, "Courier New");
   lf.lfHeight = 10;
   hFont = CreateFontIndirect(&lf);


   CHOOSEFONT cf;
   ZeroMemory(&cf, sizeof(CHOOSEFONT));
   cf.lStructSize = sizeof (CHOOSEFONT);
   cf.hwndOwner = hwnd;
   cf.lpLogFont = &lf;
   cf.Flags = CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT;


   if (ChooseFont(&cf))
   {
      DeleteObject(hFont);
      hFont = CreateFontIndirect(&lf);
      SendMessage(hRichEdit,WM_SETFONT,(UINT)hFont,TRUE);
      SaveFontValues();
   }
}

Je voudrais sauvegarder les changements dans un fichier texte grâce à cette fonction :

VOID SaveFontValues()
{
   char *ConfigFile = "settings/fnts.cnf";
   FILE *fp = fopen(ConfigFile, "w");
   fprintf(fp, "[ BEGIN ]\n");
   fprintf(fp, "[ FontName ] = #%s\n", lf.lfFaceName);
   fprintf(fp, "[ FontSize ] = #\n");
   fprintf(fp, "[ FontWeight ] = #\n");
   fprintf(fp, "[ FontItalic ] = #\n");
   fprintf(fp, "[ FontCharSet ] = #\n");
   fprintf(fp, "[ END ]\n");
   fclose(fp);
}

J'ai réussi à écrire le nom de la police d'écriture dans le fichier texte (lf.lfFaceName).

Je voudrais écrire aussi :
lfHeight (LONG)
lfWeight (LONG)
lfItalic (BYTE)
lfCharSet (BYTE)

J'ai essayer beaucoup de choses %i, %d et %s pour afficher les valeurs.

Mais ça ne marche pas...

Si vous savez comment écrire dans un fichier texte :
un LONG
ou
un BYTE

Répondez moi, svp.

Merci d'avance.

Cordialement, Grégory.

8 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Pour la sauvegarde:
    LOGFONT logfont;
    // Initialiser les membres de la strucure:
    //...
    HANDLE hfile=CreateFile("c:\\fichier.cnf", GENERIC_WRITE,0,0,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0);
    if(hfile!=INVALID_HANDLE_VALUE)
    {
        DWORD writen;
        WriteFile(hfile,&logfont,sizeof(LOGFONT),&writen,0);
        CloseHandle(hfile);
    }

Pour le chargement:
            HANDLE hfile=CreateFile("c:\\fichier.cnf", GENERIC_READ,0,0, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    if(hfile!=INVALID_HANDLE_VALUE)

    {

        DWORD read;

        ReadFile(hfile,&logfont,sizeof(LOGFONT),&read,0);

        CloseHandle(hfile);

    }
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
3
Bon bah pour italic, j'ai trouvé, c'est %x.
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
3
Pour lfWeight, pareil.
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
3
Bon bah j'ai trouvé pour tous sauf pour Height.

J'ai des valeurs comme -11 si je fais %i...
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
3
Bon bah même avec des valeurs de merde comme ça, il les reconnaît.

Genre je mets lf.lfHeight = 'õ';

ça marche...

Merci d'avoir répondu.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Si c'est juste pour sauvegarder les valeurs de la police, un simple fichier binaire ferait l'affaire. Il suffira d'écrire directement le contenu de ta structure LOGFONT dans le fichier avec WriteFile() et ReadFile() pour récupérérer le contenu de la structure depuis le fichier.
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
3
Merci beaucoup racpp.

C'est exactement ce que je cherchais à faire.

J'ai fais d'une autre manière qui me parait moins bonne que d'écrire dans un fichier binaire, car je ne sais pas traiter les fichiers binaires.

Cordialement, Grégory.
Messages postés
162
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
3
Ah bah décidément, t'es vraiment sympa.

Merci beaucoup pour ce bout de code que je vais intégrer de suite à mon programme.

Ca sera plus joli que mes fonctions...

Bye !!!