一个重载OnPaint(),引起不断触发消息,导致控件不断重画的问题。
在一个窗口中写入字符串时,在另一窗口中的List Control中动态添加项,并把字符串显示出来。
我是在要显示字符的窗口的OnPaint()函数中来做的:
PaintFlag =false;
MyDATASTR *hCurData = pDoc->GetCurrentData();//获得要添加显示的数据
if(hCurData==NULL)
return ;
m_List.DeleteAllItems();//先将ListCtrl控件原有项全部清除
for(int i=0; i<pCurData->Num;i++)//重新循环添加项
{
CString rect;
CString str;
int listcount=m_List.GetItemCount();//
str.Format("%d",listcount);
rect.Format("%d%s%s%",pCurData->BlkItem[i].Num,"currentdata",pCurData->String);
m_List.InsertItem(listcount,str);
m_List.SetItem(listcount,1,LVIF_TEXT,rect,0, LVIS_SELECTED, LVIS_SELECTED, 0);
}
}
现在的问题是当我添加项到一定数目,通常是3-5项时,list control 控件滚动条会不断翻滚,控件显示数据区域也不断翻滚。用spy看到不断重复触发消息,特别是WM_NCPAINT消息多次重复触发,它每次重复触发,又会触发控件自身的翻滚消息。
我知道问题处在OnPaint()时删除和重新添加控件项操作,消息响应处理有问题,但又找不到更好的处理办法。
请问:有什么好方法,能过解决吗?
急切盼望中。。。。。。