TinTin Geschrieben 12. März 2003 Geschrieben 12. März 2003 hi, ich such eine möglichkeit (c++ und mfc) die aktive systemschriftart und grösse auszulesen. für basic und java habe ich entsprechende funktionen gefunden aber für c++ und möglichst mfc hab ich in der msdn nichts gefunden. möglicherweise hab ich mit geschlossenen augen gesucht oder den wald vor lauter bäumen nicht gesehen. eventuell hat ja jemand einen hinweis wo ich was dazu finden kann oder wie ich mein kleines problem löse... ciao TinTin Zitieren
Klotzkopp Geschrieben 12. März 2003 Geschrieben 12. März 2003 Schau Dir mal die Funktion SystemParametersInfo an: NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),&ncm,0); [/CODE]In der NONCLIENTMETRICS-Struktur sind insgesamt fünf LOGFONT-Strukturen enthalten. Eine davon sollte den Font enthalten, den du suchst. Zitieren
TinTin Geschrieben 12. März 2003 Autor Geschrieben 12. März 2003 sorry, ich werde daraus nicht schlau. kannst du mir bitte mal sagen, wie ich an den wert von so einem LOGFONT komme. danke TinTin Zitieren
Klotzkopp Geschrieben 12. März 2003 Geschrieben 12. März 2003 Die LOGFONTs sind: ncm.lfCaptionFont ncm.lfSmCaptionFont ncm.lfMenuFont ncm.lfStatusFont ncm.lfMessageFont Aus den LOGFONT-Strukturen kannst du z.B. CFont-Objekte erstellen: CFont captionfont, smallcaptionfont, menufont, statusfont, messagefont; captionfont.CreateFontIndirect( ncm.lfCaptionFont ); smallcaptionfont.CreateFontIndirect( ncm.lfSmCaptionFont); menufont.CreateFontIndirect( ncm.lfMenuFont); statusfont.CreateFontIndirect( ncm.lfStatusFont); messagefont.CreateFontIndirect( ncm.lfMessageFont);[/CODE] Zitieren
TinTin Geschrieben 12. März 2003 Autor Geschrieben 12. März 2003 @KLOTZKOPF danke für deine hilfe aber ich komm nicht weiter. bitte nicht hauen... hab das ganze jetzt mal so eingegeben, wie du geschrieben hast. // testDlg.cpp #include "stdafx.h" #include "test.h" #include "testDlg.h" #include <stdio.h> #include <Afxwin.h> . . . void CTestDlg::OnBtngetfont() { NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),&ncm,0); CFont captionfont, smallcaptionfont, menufont, statusfont, messagefont; captionfont.CreateFontIndirect(ncm.lfCaptionFont); smallcaptionfont.CreateFontIndirect( ncm.lfSmCaptionFont); menufont.CreateFontIndirect( ncm.lfMenuFont); statusfont.CreateFontIndirect( ncm.lfStatusFont); messagefont.CreateFontIndirect( ncm.lfMessageFont); // AfxMessageBox(captionfont); } // Kompilierungmeldung: C:\projekte\ScreenSize\testDlg.cpp(186) : error C2664: 'CreateFontIndirectA' : Konvertierung des Parameters 1 von 'struct tagLOGFONTA' in 'const struct tagLOGFONTA *' nicht moeglich was mach ich den falsch??? TinTin Zitieren
Klotzkopp Geschrieben 12. März 2003 Geschrieben 12. März 2003 Originally posted by TinTin was mach ich den falsch???Mein Fehler: CFont::CreateFontIndirect erwartet ein const LOGFONT*. Also: captionfont.CreateFontIndirect(&ncm.lfCaptionFont); Was hast du denn mit dem Font vor? Zitieren
TinTin Geschrieben 12. März 2003 Autor Geschrieben 12. März 2003 ich will einfach feststellen wie 1. welche systemschrift 2. welche schriftgrösse (grosse oder kleine schriftarten) auf den system eingestellt sind! ciao TinTin ps: danke für deine bisherige hilfe! Zitieren
TinTin Geschrieben 12. März 2003 Autor Geschrieben 12. März 2003 ok, hoffentlich zum letzten mal... 'captionfont' beinhaltet doch im LOGFONT struct das attribut 'TCHAR lfFaceName[LF_FACESIZE];' wie komme ich denn an diesen TCHAR? ciao Zitieren
Klotzkopp Geschrieben 12. März 2003 Geschrieben 12. März 2003 Originally posted by TinTin wie komme ich denn an diesen TCHAR?Den kannst wie jeden anderen char-Array verarbeiten. Um aber an die Schriftgröße in Punkt zu kommen, musst du noch ein wenig rumrechnen:NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),&ncm,0); LOGFONT lf = ncm.lfMessageFont; HDC dc = ::GetDC( NULL ); int ptsize = lf.lfHeight * 72 / GetDeviceCaps(dc, LOGPIXELSY); if( ptsize < 0 ) ptsize *= -1; char szMsg[100]; wsprintf( szMsg, "%s %d pt", lf.lfFaceName, ptsize ); ::MessageBox( NULL, szMsg, "Message Font", MB_OK ); ::ReleaseDC( NULL, dc ); [/CODE] Zitieren
TinTin Geschrieben 12. März 2003 Autor Geschrieben 12. März 2003 :uli danke, jetzt gehts. alle probleme soweit gelöst... ich könnte dich küssen...:hodata ciao TinTin Zitieren
TinTin Geschrieben 12. März 2003 Autor Geschrieben 12. März 2003 ja ja, da bin ich schon wieder... hab noch ne frage. unter windows kann ich in den 'eigenschaften von anzeige' (rechte maustaste auf den desktop) tab 'eigenschaften' und dann 'erweitert' (win2k) den schriftgrad der 'anzeige' einstellen. jetzt die frage, kann man die aktuelle einstellung des schriftgrades auch auslesen? vgl. oben... wenn da jemand noch eine antwort hätte, wäre der tag gerettet... ciao TinTin Zitieren
TinTin Geschrieben 13. März 2003 Autor Geschrieben 13. März 2003 hi, ich will zwar nicht insistieren, aber wenn sich nochmal jemand mein problem anschauen könnte (s.o. lezter post), wäre mir sehr geholfen... ich bin etwas ratlos :confused: @klotzkopf: deine beiträge haben mir schon sehr weitergeholfen...danke ciao TinTin Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.