【发布时间】:2015-08-04 11:16:42
【问题描述】:
我在设置字体时遇到了 CEdit 的一个尴尬行为:对于特定的字体大小,无论 CEdit 的矩形高度如何,像“g”或“j”这样的字母都会丢失底部。这里有两个例子:
CFont *ctrlFont = new CFont();
ctrlFont ->CreatePointFont(80, "Arial Black");
CEdit m_editName;
m_editName.SetFont(ctrlFont);
结果如下:
但对于
ctrlFont ->CreatePointFont(100, "Arial Black");
一切都很好
如您所见,在这两种情况下,CEdit 的 rect 高度都大于文本的高度。父控件是一个CDialog;字体在::OnInitDialog 上设置,CEdit 的大小在::OnShowWindow 上使用SetWindowPos 方法设置。什么可能导致这种情况,我应该如何处理?
编辑:我已经尝试过@rrirower 的建议,现在我很困惑;将 CEdit 的 CDC 添加到 CFont 的初始化中会大大改变文本的掩码(您可能从一开始就看不到它,但我在同一页面上使用旧字体进行了其他编辑,并且有很大的不同):
ctrlFont1->CreatePointFont(80, "Arial Black", m_editName.GetDC());
【问题讨论】:
-
您是否尝试过在 CreatePointFont 调用中指定 DC?不确定它是否会有所作为,但值得一试。
-
@rrirower,我试过你的建议,但结果有点奇怪:文本看起来不像上次。我会用这个结果更新我的问题。
-
@rrirower 暗示编辑控件 DC 具有与桌面 DC 不同的特征。怎么可能?
-
@MarkRansom 不确定。但是,如果没有,为什么它可以作为调用的传递参数使用?
-
@rrrower 例如,有时您需要为打印机创建字体。
标签: mfc