CRichEditCtrl的使用方法

创建控件

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值