2015-05-22 10 views
5

Ich stieß auf ein peinliches Verhalten von CEdit bei der Einstellung der Schriftart: für eine bestimmte Schriftgröße, Buchstaben wie "g" oder "j" fehlt der untere Teil, unabhängig von CEdit die richtige Höhe. Hier sind zwei Beispiele:MFC Edit Steuerelement seltsames Verhalten

CFont *ctrlFont = new CFont(); 
ctrlFont ->CreatePointFont(80, "Arial Black"); 

CEdit m_editName; 
m_editName.SetFont(ctrlFont); 

mit diesem Ergebnis: enter image description here

aber für

ctrlFont ->CreatePointFont(100, "Arial Black"); 

alles fein enter image description here

Wie Sie beobachten können, die rect Höhe des CEdit ist größer als die Höhe des Textes in beiden Fällen. Die Elternkontrolle ist ein CDialog; Die Schriftart wird auf ::OnInitDialog gesetzt und CEdit Größe wird mit SetWindowPos Methode auf ::OnShowWindow festgelegt. Was könnte das verursachen und wie soll ich damit umgehen?

Bearbeiten: Ich habe @rrirower Vorschlag versucht, und jetzt bin ich verwirrt; die CEdit der Zugabe CDC zu CFont der Initialisierung der Text der Maske viel geändert (Sie es von der beggining nicht sehen können, aber ich habe andere bearbeiten die mit der alten Schrift auf der gleichen Seite und es gibt einen großen Unterschied):

ctrlFont1->CreatePointFont(80, "Arial Black", m_editName.GetDC()); 

enter image description here

+2

Haben Sie versucht, einen DC auf dem Create Anruf spezifiziert? Nicht sicher, es wird einen Unterschied machen, aber, den Versuch wert. – rrirower

+0

@rrirower, Ich habe Ihren Vorschlag versucht, aber die Ergebnisse sind irgendwie seltsam: der Text sieht nicht wie beim letzten Mal aus. Ich werde meine Frage mit diesem Ergebnis aktualisieren. – MRM

+0

@rrirower, die die Bearbeitungssteuerung DC impliziert, hat andere Eigenschaften als die Desktop-DC. Wie kann das sein? –

Antwort

0

Aufruf Create() mit allen Parametern

font.CreateFont(
    12,      // nHeight 
    0,       // nWidth 
    0,       // nEscapement 
    0,       // nOrientation 
    FW_NORMAL,     // nWeight 
    FALSE,      // bItalic 
    FALSE,      // bUnderline 
    0,       // cStrikeOut 
    ANSI_CHARSET,    // nCharSet 
    OUT_DEFAULT_PRECIS,  // nOutPrecision 
    CLIP_DEFAULT_PRECIS,  // nClipPrecision 
    DEFAULT_QUALITY,   // nQuality 
    DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 
    _T("Arial")));     // lpszFacename