zoukankan      html  css  js  c++  java
  • 重回MFC之关于获取文本宽度【思源黑体 CN】

    一个MFC需求,动态创建的自定义CStatic中需要实现自适应宽度。

     现象与思路:

     首选想到的是GetTextExtent,

    遇到的问题是,

    1.SetWindowText之后获取到的文字宽度不准确,应该是没有使用到我们指定的字体来计算宽度,

    2.在重绘时遇到文本宽度,重绘时再次调整宽度、位置会产生循环重绘,故不能用(SWP_NOREDRAW解决不了多个动态控件排序的问题,会产生文字重叠)。

    处理办法

    int cx = 0;
    int cy = 0;
    CDC memDC;
    memDC.CreateCompatibleDC(this->GetDC());
    if (memDC != NULL)
    {
    memDC.SelectObject(cStatic->m_font);
    CSize size = memDC.GetTextExtent((CString)displayStr.c_str());
    memDC.DeleteDC();
    cx = size.cx;
    cy = size.cy;
    }
     //防止CreateCompatibleDC失败使用默认字体宽度并加个系数。
    if (cx <= 0)
    {
    CSize siz = cStatic->GetDC()->GetTextExtent((CString)displayLen.c_str());
    cx = siz.cx*1.5;
    cy = 30;
    }
     
     
     
    备注说明:
    cStatic->m_font 是需要指定的字体,试过可以是GDI+字体 
    欢迎各位指正优化方法,谢谢!
     
     
     

  • 相关阅读:
    JavaSE Day11
    JavaSE Day10
    JavaSE Day9
    JavaSE Day8
    JavaSE Day7
    a
    js 操作 字符串
    委托的生明与使用
    T-SQL 的简单查询语句
    asp.net服务控件的生命周期
  • 原文地址:https://www.cnblogs.com/yangshaoqing/p/15665877.html
Copyright © 2011-2022 走看看