有三个问题不能解决,请教达人:1、日志信息是追加到底部的,用的是EM_SETSEL和EM_REPLACESEL,但这会改变光标位置,如果输出时正在前面看信息,不想自动滚到底部,有什么方法可以解决?
2、设为只读的话背景是灰的,怎么做到只读且保持白底?
3、日志太多的时候怎么自动清掉前面的一些行,和第一个问题一样,不能改变当前光标位置和视图内容(除非被删了)
2、设为只读的话背景是灰的,怎么做到只读且保持白底?
3、日志太多的时候怎么自动清掉前面的一些行,和第一个问题一样,不能改变当前光标位置和视图内容(除非被删了)
{
HBRUSH lhbrush = NULL;
HBRUSH lhbrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
return (LRESULT)lhbrush;
}
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here if (pWnd->GetDlgCtrlID() == IDC_EDIT1) //IDC_EDIT1是你的控件ID
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH lhbrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
return (HBRUSH)lhbrush;
}
return hbr;
}
2,派生一个CEdit,屏蔽键盘输入操作(有些消息保留)
3,还是文字操作(字符串操作)。
int len = GetWindowTextLength();
if(len > MAX_EVENT_LINE)
{
edit.SetSel(0, -1);
edit.Clear();
len = 0;
edit.SetReadOnly();//设置只读,按你情况定
}
edit.SetSel(len, len);
edit.ReplaceSel("日志内容");
控件内容更新不影响当前视图内容的话,就保持当前视图内容
关键是SetSel会改变位置,,再SetSel回来的话又会闪
求达人啊,分不够再加
CRichEditCtrl& edit = GetRichEditCtrl();
int len = GetWindowTextLength();
if(len > MAX_EVENT_LINE)
{
edit.SetReadOnly(FALSE);//如果你初始化的时候设置为只读,那么这里先取消只读,才能输出。
edit.SetSel(0, -1);
edit.Clear();
len = 0;
edit.SetReadOnly();//再设置回只读。
}
edit.SetSel(len, len);
edit.ReplaceSel("日志内容");