如题,谢谢。
如果窗体的大小改变,或是字体的大小改变之后怎么计算?

解决方案 »

  1.   

    我指的不是总行数,而是在cedit窗口的这个大小范围内,共有多少行?
    比如,cedit的窗口是高500,宽500,我想问的是在这500x500的范围内,有多少行?
      

  2.   

    GetFont 然后根据字体自己算吧
      

  3.   

    GetFont得到的是一个CFont的类型的变量,怎么通过CFont计算呢?
      

  4.   

    窗口高度(GetClientRect())除以字体高度(将字体选入DC,用GetTextMetric()获取高度)。
      

  5.   

    这是我的代码LOGFONT oldLogFont;
    memset(&oldLogFont,0,sizeof(oldLogFont));
    this->m_editCtrl.GetFont()->GetLogFont(&oldLogFont);CFontDialog dlgFont(&oldInfo,CF_SCREENFONTS);
    dlgFont.m_cf.Flags;
    if(dlgFont.DoModal()==IDOK)
    {
    this->m_font.Detach();
    LOGFONT newLogFont;
    dlgFont.GetCurrentFont(&newLogFont);
    this->m_font.CreateFontIndirectW(&newLogFont); this->m_editCtrl.GetDC()->SelectObject(this->m_font);

    this->m_editCtrl.SetFont(&this->m_font); TEXTMETRIC tm;
    this->m_editCtrl.GetDC()->GetTextMetrics(&tm);
    CString str;
    str.Format(L"%d",tm.tmHeight);
    AfxMessageBox(str);

    }
    其中this->m_editCtrl是CEdit的对象,this->m_font是CFont的对象
    我用GetTextMetric得到的长度不管字体有多大,都是16,这是为什么?
      

  6.   

    找到原因了,我是从ReleaseDC这个方法中想到的,我发现这个ReleaseDC方法居然要参数,我想既然要参数,那么是否可以创建若干个CDC对象呢?在我的程序中我用了this->m_editCtrl.GetDC(),这是否意味着,每次得到的是否不是同一个DC呢?结果证实就是这个问题。不过为什么可以得到多个DC呢?想不明白