15,979
社区成员
发帖
与我相关
我的任务
分享
//当前可见的第一行
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
}
}
::PostMessage(m_edit.GetSafeHwnd(), WM_VSCROLL, SB_BOTTOM, 0);
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);