MFC编辑控制奇怪的行为

时间:2015-05-22 12:19:59

标签: mfc

在设置字体时,我遇到了CEdit的尴尬行为:对于某种字体大小,字母如' g'或者' j'无论CEdit的高度如何,底部都会丢失。以下是两个例子:

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

CEdit m_editName;
m_editName.SetFont(ctrlFont);

有了这个结果: enter image description here

但是

ctrlFont ->CreatePointFont(100, "Arial Black");
一切都很好 enter image description here

正如您所看到的,在两种情况下,CEdit的高度都大于文本的高度。父控件是CDialog;字体在::OnInitDialog上设置,CEdit的大小在SetWindowPos上使用::OnShowWindow方法设置。什么可能导致这种情况,我应该如何处理呢?

编辑:我已经尝试过@rrirower的建议,现在我很困惑;将CEdit的CDC添加到CFont的初始化会改变文本的掩码很多(你可能没有看到它从开始,但我有其他编辑与旧字体在同一页面上并且存在很大差异):

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

enter image description here

1 个答案:

答案 0 :(得分:1)

使用所有参数调用CreateFont()

 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