用 GetRichEditCtrl().GetFirstVisibleLine()可以得到第一个可见行,如何得到最后一个可见行?谢谢!

解决方案 »

  1.   


    int nLine = m_edit.GetFirstVisibleLine();
    CDC* pDC = m_edit.GetDC();
    TEXTMETRIC tm;
    VERIFY(pDC->GetTextMetrics(&tm));
    m_edit.ReleaseDC(pDC);
    CRect rect;
    m_edit.GetWindowRect(&rect);
    int cx = tm.tmHeight;
    int nTotal = m_edit.GetLineCount()-1;
    int nCount = 0;
    CString strText(_T("")); nCount = rect.Height() / cx + 1 + nLine + 1;
    if(nLine >= nTotal)
    {
    strText.Format(_T("%d"), nTotal);
    }
    else
    {
    strText.Format(_T("%d"), nCount);
    }
    AfxMessageBox(strText);try it
      

  2.   

    滚动条滚到底就可以吧
    ::PostMessage(m_edit.GetSafeHwnd(), WM_VSCROLL, SB_BOTTOM, 0);
      

  3.   


    //当前可见的第一行
    const int nFirstVisibleLine = m_cRichEdit.GetFirstVisibleLine();
    //可见的第一行的第一个字符的index
    const DWORD dwCharIndex = (DWORD)m_cRichEdit.LineIndex(nFirstVisibleLine);
    //获取这个字符相对于richedit客户区坐上角的坐标
    const DWORD dwPos = m_cRichEdit.SendMessage(EM_POSFROMCHAR,dwCharIndex,0);
    const short nXPos = (short)LOWORD(dwPos);
    const short nYPos = (short)HIWORD(dwPos);
            
            const int nLineCount  = m_cRichEdit.GetLineCount();       for(int i = nFirstVisibleLine ; i < nLineCount   ; i++)
           {
                     DWORD dwCurIndex = 获取第i行的第一个字符的index;
                    short nCurYPos =  获取  dwCurIndex 相对于左上角的坐标;
                   if(nCurYPos  > 客户区的height)
                      {
                       return 第i行不可见,第i-1行可见
                         }
                     else
                      {
                          do nothing
                      }
                        
           }