Titelzeile (SDI/MDI): Font, Farbe, Hintergrund ändern + mehrzeilig anzeigen
-
Wieso hat das keine Wirkung?
-
Würde gerne helfen, aber habe gerade keinen Plan. Google wirft auch nichts Gutes heraus.
EDIT: Hm, hast du dir mal TEXTMETRIC angeschaut? Da kann man auch die Höhe, etc einstellen. Und mit GetStockObject() bekommt man wohl auch nen Handle auf die Schriftart (wenn ich das richtig verstanden habe).
Das sind nur so Sachen, die ich beim Durchstöbern gefunden habe.
Vielleicht hilt es ja.MfG,
Paul.
-
estartu schrieb:
// Die Schrift für die Überschriften erzeugen lf.lfHeight = 20; // Schriftgröße (ist vorher -11 ?!?)
Value Meaning
> 0 The font mapper transforms this value into device units and matches it against the cell height of the available fonts.
0 The font mapper uses a default height value when it searches for a match.
< 0 The font mapper transforms this value into device units and matches its absolute value against the character height of the available fonts.
-
Also, folgender Code ändert die Größe im nonclient Bereich:
NONCLIENTMETRICS metrics; metrics.cbSize = sizeof(metrics); ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &metrics, 0); CWindowDC wdc(NULL); int nLPixY = GetDeviceCaps(wdc.m_hDC, LOGPIXELSY); // m_nFontSize = metrics.lfStatusFont.lfHeight; m_nFontSize = metrics.lfStatusFont.lfHeight=36; m_nPointSize = -MulDiv(m_nFontSize,72,nLPixY); _tcscpy(metrics.lfStatusFont.lfFaceName, m_strFaceName); m_Font.CreateFontIndirect(&metrics.lfStatusFont);
Habe ich von Codeproject : http://www.codeproject.com/gdi/setfont.asp#xx883563xx
Evtl. auch noch nützlich: http://www.codeproject.com/gdi/customcaption.asp
-
Uff, das sieht ja völlig fremd aus.
Danke, das schau ich mir gleich mal an.
-
Und schreib mal, wenn es funktioniert hat. Hat meine Neugierde geweckt.
Viel Erfolg.Paul.
-
Bist du eigentlich schon weiter gekommen?
-
Nein, ich war dann davon abgekommen, weil ich erstmal die leichteren Änderungen machen wollte.
Ich melde mich dann aber hier.
-
So, ich habe mir gerade mal das Demoprojekt geladen.
Leider haben die Änderungen nur in den Childfenstern Effekt.Ich brauchs ja im Mainframe.
Hoffentlich kann ich das anpassen.
-
Ja, ist mir da auch aufgefallen. Aber ich bin mir sicher, dass du das schaffst (und hier dann die Lösung veröffentlichst).
Viel Erfolg!
Paul.
-
Jupp, man kann es anpassen.
im Header vom Mainframe:
CMultiLineCaptionEx m_Caption;
im cpp:
m_Caption.Install(this); LOGFONT lf; m_Caption.GetTextAttributes()->GetActiveFont()->GetLogFont(&lf); lf.lfHeight = -80; m_Caption.GetTextAttributes()->SetActiveFont(lf);
Und schon erschlägt einen die Überschrift.
...aber rein theoretisch kann man so herausfinden, was eingestellt ist und dann vielleicht doch nur die angezeigte Textmenge anpassen.
...ach egal, ich lass es bei der riesigen Kurzform.
-
Sehr schön. Das ging ja schnell.
Vielleicht sollte ich mir die Klasse auch nochmal anschauen...Weiter so!
-
So, ich habs jetzt in mein Projekt übernommen, hat ganz gut funktioniert.
Wenn man keinen Maximieren-Knopf haben will, gibts allerdings einen Fehler, dazu steht eine Lösung in der Diskussion zum Programm.Damit funktioniert es jetzt, ich kann wieder minimieren ohne ins leere klicken zu müssen.
Leider macht das einfach eine blaue Titelzeile, keine mit Farbverlauf - bzw ich hab jetzt ehrlich keinen Bock mehr, mir rauszusuchen, wie ich die Titelzeilenfarben rausfinde und dann eine GradientCaption zu nutzen.
Ist okay so.
-
Solange du zufrieden bist.
Vielleicht kann das hier auch in die FAQ?
-
Anmerkung: Sobald das Fenster ein Menü hat, sollte man nur CSingleLineCaption verwenden, da das Menü sonst nicht mehr angezeigt wird.
Da dann aber größere Schrift unten abgeschnitten wird, muss man nachbessern://////// // Calculate the caption text clipping rect // CRect CCaption::GetTextRect() { CRect textRect = GetCaptionRect(); textRect.left += GetIconWidth(); textRect.right -= GetButtonsWidth() + 4; // textRect.top -= 2; textRect.top -= 6; return textRect; }
Außerdem muss man das Icon von Hand nochmal mit SetIcon festlegen.