Font für Listenfeld



  • Danke für den Tipp. Wie muss ich aber hFont definieren um die Courier New zu erhalten? Egal welche Zahl ich übergebe, es erscheint immer etwas, das wie Arial fett aussieht.

    Kannst Du mir nochmal helfen?



  • schonmal CreateFont angeguckt?



  • Wenn es nur um einen fixed-width-font geht (nicht unbedingt Courier new sein muß), kannst Du auch einen "Standardfont" nehmen:

    HFONT font = (HFONT) GetStockObject(ANSI_FIXED_FONT);
    

    (weiterer Vorteil: du mußt Dir den HFONT nicht merken um ihm zum Schluß freizugeben)



  • Hallo Surkevin,

    CreateFont habe ich auch schon probiert:

    CFont myFont; 
        int nHeight=16; 
        int nWidth=10; 
        int nWeight=100; 
        bool bUnderline=false; 
        bool bItalic=false; 
        bool bStrikeOut=false;
    	myFont.CreateFont(nHeight,nWidth,0,0,nWeight,bItalic,bUnderline,bStrikeOut,0,0,0,0,0,"Courier New"); 
        GetDlgItem(IDC_LIST1)->SetFont(&myFont);
    

    Bringt aber auch nur etwas, was wie Arial fett aussieht, egal ob ich Courier, Arial etc. eintrage.

    In der MSDN bin ich irgendwo auf einen Hinweis gestoßen, dass der Fontname mit dem in der Win.ini stehenden übereinstimmen muss. Unter XP gibt es unter [Font] in der win.ini keine Einträge. Ist das vielleicht das Problem?

    Vielen Dank



  • Du darfst den Font erst zerstören, wenn die Listbox auch wegfliegt

    ==> aus font einen Member des Dialogs machen



  • Hallo Peterchen,

    wo zerstöre ich den Font denn?? Ich habe ihn doch mit den obigen Anweisungen versucht zu kreieren??

    Kann sein, ich bin zu dumm:-))

    In VB ist soetwas überhaupt kein Problem. Da komme ich an jede Eigenschaft eines Steuerelementes problemlos ran. Sag jetzt bitte nicht, "Dann geh doch zu deinem VB". Ich will mich in der MFC ernsthaft durchbeissen. Klappt auch ganz gut, aber die Oberflächengestaltung ist echt ein Kreuz.

    PS: Die Anweisungen zu CreateFont habe ich in der Initialisierung des Dialogobjektes untergebracht.



  • CFont Destruktor ruft DeleteObject auf

    Ich denke mal du erzeugst und setzt den Font im InitDialog-Handler, und CFont ist eine lokale variable. (Daß der Destruktor am Ende der Funktion aufgerufen wird, weißt du?)

    Wie gesagt, wenn du für das Font-Objekt eine Membervariable des Dialogs nimmst, "ist alles gut".

    IMO sind die Wrapper für GDI_Ressourcesn (HFONT, HPEN usw.) die am schlechtesten gelungenen in der MFC. (Hat aber damit zu tun, was die MFC sein will, und was nicht.) Man muß halt sowohl die darunterliegende Windows API kennen (die schon kompliziert genug ist), sondern auch noch die MFC-Wrapperklassen beachten. Dein Frust ist also zumindest verständlich 😃



  • Hallo peterchen,

    ich versuche es mal mit einer Membervariablen vom Typ CFont. Danke für den Tipp.

    Komm gut in die Woche!



  • Hallo peterchen,

    ich versuche es mal mit einer Membervariablen vom Typ CFont. Danke für den Tipp.

    Komm gut in die Woche!



  • Hallo peterchen,

    klappt mit Membervariable CFont m_font einwandfrei. Ganz logisch ist es aber nicht. Wenn lokale Variable vom Typ CFont zerstört werden würde, dürfte sich Font im Listenfeld nicht ändern. Tat er aber doch, wenn auch nicht wie gewünscht.

    OK. Seit ich am Computer sitze, habe ich gelernt, dass es "übersinnliche Phänomene" [logisch nicht erklärbare Effekte] gibt.

    Danke für deine Hilfe.


Anmelden zum Antworten