代码之家  ›  专栏  ›  技术社区  ›  Smashery

在MFC中获取文本宽度

  •  5
  • Smashery  · 技术社区  · 15 年前

    我想动态调整cButton的大小,使其与文本的宽度一致。在MFC中是否有内置的方法来执行此操作,或者有计算某些指定文本的像素宽度的方法(以便我可以使用 CWnd::SetWindowPos )?

    4 回复  |  直到 10 年前
        1
  •  6
  •   Smashery    15 年前

    你可以使用 CDC::GetTextExtent 以某种字体计算文本宽度。使用 CWnd::GetDC 从显示文本的控件中获取设备上下文。

        2
  •  8
  •   Himanshu gwell    10 年前

    这太乏味了。你需要使用 CWnd::GetFont() 在按钮上获取它使用的字体,然后使用标准 GetTextText 在一 CDC 对象,您将在其中选择该字体。 看起来像是

    CClientDC dc( &button );
    CFont * pOldFont = dc.SelectObject( button.GetFont() );
     ... dc.GetTextExtent...
    dc.SelectObject( pOldFont);
    
        3
  •  4
  •   djeidot    15 年前

    除了@demoncodemonkey的答案,您还可以调用 CDC::DrawText DT_CALCRECT 旗帜。这样就不会绘制文本,但传递给函数的crect将具有要绘制的文本的宽度和高度。

    如果要用换行符绘制文本(使用 DT_WORDBREAK 旗帜)你不能用 CDC::GetTextExtent .

        4
  •  1
  •   Himanshu gwell    10 年前
    CClientDC hdc(this);
    GetRect.SetRect(0,0,iLabelWidth,0);
    //
    //To get Height of Lable in advance
    //
    hdc.DrawText(
                    TempData,
                    TempData.GetLength(),
                    GetRect,
                    DT_CALCRECT | DT_MODIFYSTRING | DT_WORDBREAK 
                );