Benutzer Font herausfinden



  • Wie bekomme ich heraus, was der Benutzer unter Systemsteuerung/Anzeige/Darstellung/Erweitert für einen Font für den Dialogtext eingestellt hat?

    Ich hab's mit GetStockObject() probiert. Angeblich soll man da bei DEFAULT_GUI_FONT und/oder SYSTEM_FONT den Font kriegen, der für Dialoge und Menus verwendet wird. Kann schon allein vom Konzept nicht klappen, weil man für Dialoge und Menus unterschiedliche Fonts einstellen kann, und funktioniert natürlich auch nicht. Die liefern völlig andere Fonts als eingestellt.

    Man muss doch irgendwie rausfinden können, was der User da eingestellt hat, mit den Farben geht's ja schliesslich auch.



  • Kann schon allein vom Konzept nicht klappen, weil man für Dialoge und Menus unterschiedliche Fonts einstellen kann, und funktioniert natürlich auch nicht.

    Wenn Du im Dialog nicht den Font verwendest, der im System eingestellt ist, kannst Du das System logischerweise auch nicht dazu befragen. Und bei den von Dir angesprochenen Farben klappt das natürlich auch nicht; es zwingt Dich niemand, die Systemfarben zu verwenden.

    [edit] Wenn der Dialog bereits angezeigt wird, kannst Du es mit WM_GETFONT versuchen [/edit]

    [ Dieser Beitrag wurde am 13.12.2002 um 19:01 Uhr von -King- editiert. ]



  • Mein Problem ist ja gerade das ich *keine* dialoge verwende, sondern Stinknormale Fenster, aber *trotzdem* die Benutzereinstellungen berüchsichtigen will.

    Mit den Farben klappt das Wunderbar, da gibt's ein eigenes API für, nur den Font kann ich nicht herausfinden...



  • Und wo siehst Du jetzt das Problem mit DEFAULT_GUI_FONT?

    [edit] Um es nochmal auf den Punkt zu bringen: Auf meinem Rechner ist die Standard-Farbe für Fenster weiß. Jetzt kann ich in meinen Programmen allen Fenstern die Farbe grün verpassen (man soll die Hoffnung schließlich nicht aufgeben). Trotzdem bleibt die Systemfarbe weiß. Das Gleiche gilt auch für die Fonts. Der Font, den Du suchst, heißt definitiv DEFAULT_GUI_FONT. Und selbst wenn die meisten Dialoge was anderes angeben wird sich das nicht ändern. Viel erstaunlicher finde ich die Tatsache, daß man beispielsweise mit dem VC, zumindest mit dem 6er, im Ressourcen-Editor nicht den DefaultGuiFont einstellen kann (jedenfalls habe ich noch keinen Weg gefunden). Du mußt leider jedesmal das Ressourcen-Script händisch bearbeiten. [/edit]

    [ Dieser Beitrag wurde am 13.12.2002 um 20:56 Uhr von -King- editiert. ]



  • Hmm, ich glaube irgendwie reden wir aneinander vorbei 🙂

    Also, um die Frage mal anders zu stellen: Ich brauche das, was GetSysColor() für die vom Benutzer eingestellten Farben ist, nur für die vom Benutzer eingstellten Fonts.

    Wenn ich mir in der Systemsteuerung einstelle, das meine Scrollbars rot sein sollen, kann ich das mit GetSysColor() herausfinden, und für meine selbstgebastelten Scrollbars berücksichtigen und sie halt rot anmalen. Wenn ich mir in der Systemsteuerung einstelle, das meine Dialogtexte in "Lucida Sans Unicode" dargestellt werden sollen, kann ich das mit XXX() rausfinden und in meinem selbtgebauten Static-Text-Control berücksichten, indem ich sie in eben genau diesem Font zeichne. Meine Frage ist, wie ist der Name von XXX. GetStockObject != XXX weil es offenbar irgendeinen Windows-Default liefert, der nix mit dem zu tun hat, was ich eingestellt habe.



  • Suchst Du nun den Font (HFONT) oder dessen Namen (LOGFONT->lfFaceName)? Ersteres bekommst Du wie gesagt von GetStockObject(DEFAULT_GUI_FONT). Letzteres ist nicht ganz so einfach, aber das muß man normalerweise auch nicht wissen (wozu auch?). Vermutlich bekommst Du als Namen aber "MS Shell Dlg" zurück:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_4qcn.asp?frame=true



  • meinem selbtgebauten Static-Text-Control berücksichten,

    Oh, sorry. Alle Windows-Controls benutzen Standardmäßig GetStockObject(SYSTEM_FONT). Ich habe Dir also was falsches ezählt.



  • Ich glaube langsam, dass die Einstellung für "Dialogfeldtext" im Control Panel reine Ver*****ung ist. Windows hält sich ja in seinen eigenen Dialogen selbst nicht dran. Hmmm, Vermutlich weil es sonst bei Verschiedenen Grössen das Dialog-Layout zerschiessen könnte. Ein Problem, das ich mit meinen Self-Made-Dialogen nicht habe, die passen sich der Fontgrösse automagisch an. Na, mal sehen, ich werde nochmal schauen, ob ich in der Registry herausfinden kann, was da eingestellt ist, irgendwo muss Windows das ja ablegen.

    Trotzdem Danke.



  • Ich glaube langsam, dass die Einstellung für "Dialogfeldtext" im Control Panel reine Ver*****ung ist.

    Wieso das? In meinen Dialogen und MessageBoxen bekomme ich den richtigen (eingestellten) Font zu sehen. Ich muß aber leider dazu immer das Ressourcen-Script händisch bearbeiten, aber das habe ich ja bereits gesagt. Allerdings wird diese Nachrarbeit oft nicht gemacht.

    Ein Problem, das ich mit meinen Self-Made-Dialogen nicht habe, die passen sich der Fontgrösse automagisch an.

    Du sendest WM_SETFONT und der Dialog ändert seine Größe, oder wie? Wenn ja: Wozu braucht man das? Der Dialog wird doch normalerweise für eine bestimmte Font-Größe entworfen, die ändert sich doch nicht andauernd. Wenn nein: Wie ist das gemeint?



  • Ich hab's gefunden: SystemParametersInfo() -> die NONCLIENTMETRICS. Windows verwendet den eingestellten Font für Message-Boxen, darum findet man es unter lfMessageFont.

    Wozu das gut ist? Kennst du SWING von Java? Funktioniert ganz prächtig, auch ohne Ressourcen. So ähnlich sieht das bei mir auch aus.



  • Original erstellt von -King-:
    Viel erstaunlicher finde ich die Tatsache, daß man beispielsweise mit dem VC, zumindest mit dem 6er, im Ressourcen-Editor nicht den DefaultGuiFont einstellen kann (jedenfalls habe ich noch keinen Weg gefunden). Du mußt leider jedesmal das Ressourcen-Script händisch bearbeiten

    Genau das ist mir auch schon augefallen. Standard ist da, glaube ich, MS Sans Serif für STATICS und so. Wenn der User jetzt im Sysmen WingDings 😃 eingestellt, hat würde das dann bedeuten mein Dialog würde er mit MS Sans Serif präsentiert bekommen? Diese Frage nur noch mal im Gewissheit zu bekommen. Denn wenn ich auf so einen Dialog recht viele Controlls habe wird es etwas Mühsam deren Font entsprechend der DefaultGuiFont anzupassen. Na ja gut wenn man geschickt ist, verpaßt man denen eine fortlaufende ID und macht das ganze in einer Schleife, aber trotzdem.


Anmelden zum Antworten