一、创建
可以在工具箱中找到添加,也可以使用Create函数创建
MyRichEditCtrl::public CRichEditCtrl自定义类继承CRichEditCtrl
MyRichEditCtrl m_RichEditCtrl;
m_RichEditCtrl.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_MULTILINE, CRect(5,5,900, 745), this, IDC_RICHEDIT);
注意点:
实现多行输入:用ES_MULTILINE,或者在控件属性中的样式|4。
初始化控件调用环境:在工程的app.cpp中的InitInstance()调用AfxInitRichEdit5();
二、字体尾行输入及颜色变化
int MyRichEditCtrl::AppendTextAndScroll(string strTemp, COLORREF color)
{
CHARFORMAT cf;
GetSelectionCharFormat(cf); //当前选定内容中的字符格式设置属性
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask |= CFM_COLOR;//crTextColor 和 dwEffects 的CFE_AUTOCOLOR值有效。
cf.dwEffects &= ~CFE_AUTOCOLOR;//弃掉这个属性字体颜色才会有变化
cf.crTextColor = color; //RGB(255,0,0)格式
int ilen = GetWindowTextLength();//获取字体长度
SetSel(ilen, -1);//设置选定区域
SetSelectionCharFormat(cf);把选定区域的字体颜色改变
if (strTemp.length() > 96) //字符太长,难看进行换行处理
{
string str;
while (strTemp.length() > 93)
{
str += strTemp.substr(0, 93) + "\r\n";
strTemp = strTemp.substr(93);
}
str += strTemp;
strTemp = str;
}
ReplaceSel(CString(strTemp.c_str()));//把选定区域字符串替换
PostMessage(WM_VSCROLL, SB_BOTTOM, 0);//发消息把垂直滚动条拉到底部
return 0;
}
三、鼠标滚轮滑动,控件光标能上下移动
BEGIN_MESSAGE_MAP(MyRichEditCtrl, CRichEditCtrl)
ON_WM_MOUSEWHEEL()//在此加上鼠标滚轮事件
END_MESSAGE_MAP()
声明鼠标滚轮操作函数
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
实现鼠标滚轮操作函数:
BOOL MyRichEditCtrl::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
BOOL bUp = TRUE;//滚轮滚动方向上或下
int nDelta = zDelta;//滚轮滚动数值
if (zDelta < 0)//向下负数,一般120为一键值
{
bUp = FALSE;
nDelta = -zDelta;
}
//当前滚轮转动时,获取屏幕滚动的行数
UINT nWheelScrollLines = 0;
::SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,&nWheelScrollLines,0);
//行数*键值/标准键值得到真正的行数
int nLines = (nDelta * nWheelScrollLines) / WHEEL_DELTA;
while (nLines--)
{
//一行行的发送消息进行滚动
SendMessage(WM_VSCROLL, bUp ? SB_LINEUP : SB_LINEDOWN, 0);
}
return CRichEditCtrl::OnMouseWheel(nFlags, zDelta, pt);
}