如果我在 MFC 中有粗体文本,如何计算宽度

Posted

技术标签:

【中文标题】如果我在 MFC 中有粗体文本,如何计算宽度【英文标题】:How to calculate the width if i am having bold text in MFC 【发布时间】:2014-05-28 06:11:17 【问题描述】:

这是计算普通文本宽度的示例代码(没有粗体)。 --现在我想计算粗体文本的宽度。 我有“中介银行:”作为粗体文本

任何人都可以帮助......请

int CPrintableInvoice::GetFormattedStringWidth(const CString& txt)

  if (txt.IsEmpty())
      return 0;

  CFont *pOldF, *pF = GetFont();
  CClientDC dc(this);
  pOldF = dc.SelectObject(pF);
  CRect r;
  dc.DrawText(txt, &r, DT_SINGLELINE|DT_CALCRECT);
  int wid = r.Width();
  dc.SelectObject(pOldF);
  return wid;

提前致谢..

谢谢, 哈雷什。

【问题讨论】:

要获得粗体文本的宽度,您需要创建具有粗体属性的字体,并在执行相同计算之前将其选择到设备上下文中。要创建粗体字体: 1. 调用pF->GetObject(...) 以返回LOGFONT 结构。 2.增加lfWeight会员。 3. 使用CFont::CreateFontIndirect(...) 创建新字体。 4. 将其选入CClientDC 即可。 【参考方案1】:

尝试改用GetTextExtent()。如下:

CFont *pOldF, *pF = GetFont();
CClientDC dc(this);
pOldF = dc.SelectObject(pF);
CSize size = dc.GetTextExtent();
return size.cx;

【讨论】:

以上是关于如果我在 MFC 中有粗体文本,如何计算宽度的主要内容,如果未能解决你的问题,请参考以下文章

如果文本超出窗口宽度MFC,如何为CButton复选框包装文本?

Google脚本:从文档生成电子邮件会丢失格式

泰山OFFICE技术讲座:使用字体粗体的四种情形

MFC 中的粗体标签

如何计算jspdf中文本的宽度和高度?

检测 MFC 控件是不是没有足够的宽度来容纳文本(并且文本将被截断)