通过timer实现edit滚动显示文本时的问题
vc程序上在对话框建立edit,然后让其水平(或垂直)滚动显示文本。
以垂直滚动(我的思路就是不停的把第一行显示到最后)为例:
在对话框类中定义
CEdit testedit;
在界面上放一个按钮,其单击事件写入下面代码:
testedit.Create(WS_VISIBLE|ES_MULTILINE,CRect(0,100,200,200),this,25001);
CString teststr;
teststr = teststr + "a" + "\r\n";
teststr = teststr + "bb" + "\r\n";
teststr = teststr + "ccc" + "\r\n";
teststr = teststr + "dddd" + "\r\n";
teststr = teststr + "eeeee" + "\r\n";
teststr = teststr + "ffffff" + "\r\n";
teststr = teststr + "ggggggg" ;
testedit.SetWindowText(teststr);
SetTimer(2,150,NULL);
ontimer事件写入下面代码:
KillTimer(nIDEvent);
CString s;
int position;
testedit.SetRedraw(FALSE);//这句和下面那句testedit.SetRedraw(TRUE);都是按照网上的建议加上的,但加上似乎没什么用处,且水平滚动时,加上此代码还会让屏幕看不出滚动效果
testedit.GetWindowText(s);
position=s.Find("\r\n");
s=s.Right(s.GetLength()-position-2)+"\r\n"+s.Left(position);
testedit.SetWindowText("");
testedit.SetWindowText(s);
testedit.UpdateWindow();
CDialog::OnTimer(nIDEvent);
testedit.SetRedraw(TRUE);
SetTimer(2,150,NULL);
在对话框的OnCtlColor事件写入下面的代码:
int l_iCtrlID = pWnd->GetDlgCtrlID();
if(l_iCtrlID>25000 && l_iCtrlID<=30000)//我的程序中edit的控件id都是在此范围内
{
hbr=CreateSolidBrush(RGB(0,255,0));//设置背景色、字色
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(0,0,255));
}
但现在的问题是,我启动程序,点击测试按钮(就是创建并显示edit,启动timer),然后程序运行一段时间后(不超过1小时),界面的显示就乱了,望高手指点代码错误之处,多谢!