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

Windows Discussion :

Problème de chargement de police de caractères


Sujet :

Windows

  1. #1
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut Problème de chargement de police de caractères
    Bonjour

    Je voudrais avec mon application créer des bitmap fonts, c'est à dire des textures contenant tous les caractères d'une police donnée.

    Tout marche très bien, à part que je n'arrive pas à charger la police que je veux, c'est toujours la même qui apparaît sur la texture créée. Pourtant CreateFont ne renvoie pas d'erreur, tout comme les autres fonctions utilisées d'ailleurs. Ce qui est encore plus étonnant c'est que j'ai repris ce code d'une appli qui fait la même chose, et dans cette appli ça marche très bien.
    Je ne suis pas un pro du développement Win32, alors je suppose que quelque chose m'a echappé.

    Voilà mon code :

    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
    string FontName = "Arial";
    
    unsigned char* Data = NULL;
    BITMAPINFO BitmapInfo;
    memset(&BitmapInfo, 0, sizeof(BITMAPINFO));
    BitmapInfo.bmiHeader.biSize     = sizeof(BITMAPINFOHEADER);
    BitmapInfo.bmiHeader.biWidth    = 256;
    BitmapInfo.bmiHeader.biHeight   = 256;
    BitmapInfo.bmiHeader.biBitCount = 24;
    BitmapInfo.bmiHeader.biPlanes   = 1;
    
    HDC     Hdc          = CreateCompatibleDC(NULL);
    HBITMAP BitmapHandle = CreateDIBSection&#40;Hdc, &BitmapInfo, DIB_RGB_COLORS, reinterpret_cast<void**>&#40;&Data&#41;, NULL, 0&#41;;
    HFONT   FontHandle   = CreateFont&#40;16, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, OEM_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH, FontName.c_str&#40;&#41;&#41;;
    
    SelectObject&#40;Hdc, BitmapHandle&#41;;
    SelectObject&#40;Hdc, FontHandle&#41;;
    SetBkColor&#40;Hdc, RGB&#40;0, 0, 0&#41;&#41;;
    SetTextColor&#40;Hdc, RGB&#40;255, 255, 255&#41;&#41;;
    
    char Character = 0;
    for &#40;int j = 0; j < 16; ++j&#41;
    &#123;
        for &#40;int i = 0; i < 16; ++i, Character++&#41;
        &#123;
            RECT Rect = &#123;i * 16, j * 16, &#40;i + 1&#41; * 16, &#40;j + 1&#41; * 16&#125;;
            DrawText&#40;Hdc, &Character, 1, &Rect, DT_LEFT&#41;;
        &#125;
    &#125;
    
    // Création de la texture à partir des pixels pointés par Data
    // ...
    
    DeleteObject&#40;FontHandle&#41;;
    DeleteObject&#40;BitmapHandle&#41;;
    DeleteDC&#40;Hdc&#41;;
    Merci !

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    je crois que le problème vient du nom de la police.

    dans la doc de CreateFont :
    The EnumFontFamilies function can be used to enumerate the typeface names of all currently available fonts.

    ......


    For example, if you request a font named Palatino, but no such font is available on the system, the font mapper will substitute a font that has similar attributes but a different name

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ai essayé EnumFontFamilies : les polices que j'utilise sont bien disponibles, leur nom est correct.

    En fait après avoir essayé beaucoup de polices différentes, j'ai remarqué que certaines marchaient tout de même. Bizarre, qu'est-ce qui pourrait faire que certaines soient chargées et d'autres non ? En plus on ne peut pas dire que j'utilise des polices bizarroïde : parmi celles qui ne marchent pas il y a par exemple Arial et Comic Sans MS.

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    ca me ramène quelques années en arrière.....

    j'ai trouvé ca dans la doc.....

    Although most font selection operations involve the user, there are some instances where this is not true. For example, a developer may want to use a unique font in an application to draw text in a control window. To select an appropriate font, the application must be able to determine what fonts are available, create a logical font that describes one of these available fonts, and then select that font into the appropriate device context.

    An application can enumerate the available fonts by using the EnumFonts or EnumFontFamilies functions. EnumFontFamilies is recommended because it enumerates all the styles associated with a family name. This can be useful for fonts with many or unusual styles and for fonts that cross international borders.

    Once an application has enumerated the available fonts and located an appropriate match, it should use the values returned by the font enumeration function to initialize the members of a LOGFONT structure. Then it can call the CreateFontIndirect function, passing to it a pointer to the initialized LOGFONT structure. If the CreateFontIndirect function is successful, the application can then select the logical font by calling the SelectObject function. When initializing the members of the LOGFONT structure, be sure to specify a specific character set in the lfCharSet member. This member is important in the font mapping process and the results will be inconsistent if this member is not initialized correctly. If you specify a typeface name in the lfFaceName member of the LOGFONT structure, make sure that the lfCharSet value matches the character set of the typeface specified in lfFaceName. For example, if you want to select a font such as MS Mincho, lfCharSet must be set to the predefined value SHIFTJIS_CHARSET.
    en plus il y a toujours le nec plus ultra de l'API :

    CreateFontIndirectEx et
    EnumFontFamiliesEx

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Hmm d'accord je comprends mieux. J'ai remplacé OEM_CHARSET par DEFAULT_CHARSET, ça fait l'affaire j'arrive maintenant à charger toutes les polices.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de transfert de polices de caractères
    Par Gazoute dans le forum Windows Vista
    Réponses: 1
    Dernier message: 12/04/2008, 19h50
  2. [FPDF] Problème de chargement de police
    Par Trebor_ dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/03/2008, 13h27
  3. Problème d'affichage de police de caractères
    Par mr_samurai dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 14/12/2007, 11h01
  4. Problème police de caractère dans JProgressBar
    Par barbiche dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 15/10/2007, 14h41
  5. Problème avec police de caractères helvetica
    Par maxdef dans le forum Mise en forme
    Réponses: 0
    Dernier message: 21/09/2007, 10h50

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