2015-05-22 12 views
5

Mi sono imbattuto in un comportamento imbarazzante di CEdit quando si imposta il carattere: per una certa dimensione del carattere, lettere come 'g' o 'j' mancano della parte inferiore, indipendentemente dall'altezza rect di CEdit. Ecco due esempi:Comando di modifica MFC comportamento strano

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

CEdit m_editName; 
m_editName.SetFont(ctrlFont); 

con questo risultato: enter image description here

ma per

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

tutto va bene enter image description here

Come si può osservare, l'altezza rect del CEdit è più grande dell'altezza del testo in entrambi i casi. Il controllo genitore è un CDialog; il font è impostato su ::OnInitDialog e la dimensione CEdit è impostata con il metodo SetWindowPos su ::OnShowWindow. Cosa potrebbe causare questo, e come dovrei gestirlo?

Edit: ho provato il suggerimento di @rrirower, e ora sono confuso; l'aggiunta del CDC CEdit per l'inizializzazione del CFont cambiato un sacco maschera del testo (non si può vedere dalla beggining, ma ho altri di modifica del con il vecchio tipo di carattere sulla stessa pagina e c'è una grande differenza):

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

enter image description here

+2

hai provato specificando un DC sulla chiamata CreatePointFont? Non sono sicuro che farà la differenza, ma vale la pena provare. – rrirower

+0

@rrirower, ho provato il tuo suggerimento, ma i risultati sono in qualche modo strani: il testo non assomiglia all'ultima volta. aggiornerò la mia domanda con questo risultato. – MRM

+0

@rrirower che implica il controllo di modifica DC ha caratteristiche diverse rispetto al desktop DC. Come potrebbe essere? –

risposta

0

chiamata CreateFont() con tutti i parametri

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