创建控件
1)对话框上加一个Picture Control的控件(IDC_RICHEDIT_RECNO)(用来确定CRichEditCtrl的大小和位置)
2)创建控件
//定义
CRichEditCtrl m_editDumpData3;
//创建
CRect rect;
CWnd *p = GetDlgItem(IDC_RICHEDIT_RECNO);
ASSERT(p != NULL);
GetWindowRect(&rect);
p->GetWindowRect(&rect);
this->ScreenToClient(&rect);
m_editDumpData3.Create(WS_VISIBLE | WS_CHILD | ES_MULTILINE | WS_VSCROLL | WS_HSCROLL | WS_BORDER, rect, this, 10001);
滚动到指定行(垂直方向)
//滚动到100行
int nStartLine = 100;
int nVLine = m_editDumpData3.GetFirstVisibleLine();
m_editDumpData3.LineScroll(nStartLine - nVLine);
//指定行可见, 没有直接的函数,自己写了一个
void SetVisibleLine(CRichEditCtrl& editCtrl, int nLine)
{
int nFirstLine = editCtrl.GetFirstVisibleLine();
int LineHeight = 16;
if (editCtrl.GetLineCount() > 1)
{
int nPos1 = editCtrl.LineIndex(1);
int nPos2 = editCtrl.LineIndex(2);
CPoint p1 = editCtrl.GetCharPos(nPos1);
CPoint p2 = editCtrl.GetCharPos(nPos2);
LineHeight = p2.y - p1.y;
}
CRect rect;
editCtrl.GetClientRect(&rect);
int nVisibleLine = rect.Height() / LineHeight;
int nLastLine = nFirstLine + nVisibleLine - 1;
if (nLine < nFirstLine)
{
editCtrl.LineScroll(nLine - nFirstLine);
}
else if (nLine > nLastLine)
{
editCtrl.LineScroll(nLine - nLastLine);
}
}
水平方向的滚动
没有找到直接指定位置的滚动的方法
循环调用SendMessage(WM_HSCROLL, SB_LINELEFT | SB_LINERIGHT, 0), 滚动条到指定位置为止
void MoveHScrollBar(CRichEditCtrl& editCtrl, int nPos)
{
SCROLLINFO si;
si.cbSize = sizeof(si);
editCtrl.GetScrollInfo(SB_HORZ, &si);
int nCurPos = si.nPos;
if (nPos != nCurPos)
{
bool bLeft = true;
if (nPos > nCurPos)
{
bLeft = false;
}
while (true)
{
if (bLeft)
{
editCtrl.SendMessage(WM_HSCROLL, SB_LINELEFT, 0);
}
else
{
editCtrl.SendMessage(WM_HSCROLL, SB_LINERIGHT, 0);
}
nCurPos = editCtrl.GetScrollPos(SB_HORZ);
if (bLeft && nCurPos <= nPos)
{
break;
}
if (!bLeft && nCurPos >= nPos)
{
break;
}
if (nCurPos <= si.nMin || nCurPos >= si.nMax)
{
break;
}
}
}
}
设置文字字体颜色
//需要设置颜色的开始位置nPos1和终了位置nPos2
m_editDumpData3.SetSel(nPos1, nPos2);
CHARFORMAT cf = {0};
cf.cbSize = sizeof(cf);
cf.dwMask |= CFM_COLOR;
cf.crTextColor = RGB(255,0,0);
m_editDumpData3.SetSelectionCharFormat(cf);
设置文字背景色
//需要设置颜色的开始位置nPos1和终了位置nPos2
m_editDumpData3.SetSel(nPos1, nPos2);
CHARFORMAT2 cf2;
ZeroMemory(&cf2, sizeof(CHARFORMAT2));
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_BACKCOLOR;
cf2.crBackColor = RGB(255, 255, 0);
m_editDumpData3.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);