vc++编程,怎么实现文本框内容自动滚动显示?
文本框里要显示的内容不断增加,怎么能让文本框一直动态的显示最近增加的内容,以前的内容可以通过滚动条查看?用SDK函数来实现。...
文本框里要显示的内容不断增加,怎么能让文本框一直动态的显示最近增加的内容,以前的内容可以通过滚动条查看?用SDK函数来实现。
展开
1个回答
展开全部
我自己包了个函数实现你说的功能, 其中m_editLog是多行文本框控件。参数strLog为你要输出的内容, bAddTime为是否在要输出的内容前加上时间。 其中m_critical锁可有可无,当你这个函数可能被多个线程同时调用的时候,就需要加!
void xxx::AddLog(CString strLog, BOOL bAddTime)
{
if (bAddTime)
{
CTime t = CTime::GetCurrentTime();
strLog = t.Format("%x %X ") + strLog;
}
strLog += _T("\n");
m_crical.Lock();
int nLineCnt = m_editLog.GetLineCount();
int nBegin, nEnd;
nBegin = m_editLog.LineIndex(nLineCnt-1);
if (nBegin != -1)
{
nEnd = nBegin + m_editLog.LineLength(nBegin);
m_editLog.SetSel(nBegin, nEnd);
m_editLog.ReplaceSel(strLog);
}
else
{
m_editLog.SetSel(0, 0);
m_editLog.ReplaceSel(strLog);
}
if (nLineCnt >= 500)
{
m_editLog.SetSel(0, -1);
m_editLog.Clear();
}
m_crical.Unlock();
}
void xxx::AddLog(CString strLog, BOOL bAddTime)
{
if (bAddTime)
{
CTime t = CTime::GetCurrentTime();
strLog = t.Format("%x %X ") + strLog;
}
strLog += _T("\n");
m_crical.Lock();
int nLineCnt = m_editLog.GetLineCount();
int nBegin, nEnd;
nBegin = m_editLog.LineIndex(nLineCnt-1);
if (nBegin != -1)
{
nEnd = nBegin + m_editLog.LineLength(nBegin);
m_editLog.SetSel(nBegin, nEnd);
m_editLog.ReplaceSel(strLog);
}
else
{
m_editLog.SetSel(0, 0);
m_editLog.ReplaceSel(strLog);
}
if (nLineCnt >= 500)
{
m_editLog.SetSel(0, -1);
m_editLog.Clear();
}
m_crical.Unlock();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询