MFC编辑控件的奇怪行为

5

当设置CEdit的字体时,我遇到了一个尴尬的行为:对于某些字体大小,例如'g'或'j'这样的字母会缺少底部部分,而不管CEdit的矩形高度如何。以下是两个示例:

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

CEdit m_editName;
m_editName.SetFont(ctrlFont);

以下是结果: 在此输入图片描述

但是对于

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

一切正常。enter image description here

您可以观察到,在两种情况下,CEdit的矩形高度都大于文本的高度。父控件是CDialog;字体在::OnInitDialog上设置,CEdit的大小在::OnShowWindow上通过SetWindowPos方法设置。是什么原因导致了这种情况,我该如何处理?

编辑:我尝试了@rrirower的建议,现在我很困惑;将CEdit的CDC添加到CFont的初始化中改变了文本的蒙版(您可能一开始没有看到它,但我在同一页上有其他旧字体的编辑器,这里有很大的区别):

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

enter image description here


2
你尝试在CreatePointFont调用中指定一个DC了吗?不确定它是否会有所不同,但是值得一试。 - rrirower
@rrirower,我尝试了你的建议,但结果有点奇怪:文字看起来不像上次那样。我会更新我的问题,并附上这个结果。 - MRM
@rrirower这意味着编辑控件DC具有不同于桌面DC的特性。那怎么可能呢? - Mark Ransom
@MarkRansom 不确定。但是,如果它没有被传递参数调用,那么为什么这个参数可用呢? - rrirower
有时候你需要为打印机创建字体,例如。 - Mark Ransom
您如何根据创建的字体大小计算CEdit的尺寸?看起来您的CEdit太短了。 - Vlad Feinstein
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接