【问题标题】:MFC edit control strange behaviourMFC 编辑控件奇怪的行为
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2010-12-09
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多