重绘一个区域的有关问题

重绘一个区域的问题
if (m_Button_RunOrStop == true)
{
int i_zhupic1;
for (i_zhupic1=0;i_zhupic1<100;i_zhupic1++)
{
m_BResult_zhupic[i_zhupic1] = (double)rand()/RAND_MAX*60 +1;
m_PResult_zhupic[i_zhupic1] = (int)(rand() % 360);
}

CDC *pDC = new CClientDC(this);
CDC memDc; //内存DC  
memDc.CreateCompatibleDC(pDC);  
CBitmap mempBitMap;  
mempBitMap.CreateCompatibleBitmap(pDC,540,60);  
CBitmap *pOldBmp = memDc.SelectObject(&mempBitMap);
memDc.SetBkMode(TRANSPARENT);  
memDc.FillSolidRect(0,0,540,60,RGB(255,255,255));


for (int i=0;i<100;i++)
{
if (m_BResult_zhupic[i] > 0)
{
CPen prpspen;
prpspen.CreatePen(PS_SOLID,1,RGB(0,0,0));
memDc.SelectObject(&prpspen);
memDc.MoveTo(m_PResult_zhupic[i]*1.5+6,389);
memDc.LineTo(m_PResult_zhupic[i]*1.5+6,389-m_BResult_zhupic[i]);
prpspen.DeleteObject();

}
}
pDC->SetBkMode(TRANSPARENT);
pDC->BitBlt(6,329,540,60,&memDc,0,0,SRCCOPY);//直接拷贝内存DC到屏幕DC上  
memDc.SelectObject(pOldBmp);
mempBitMap.DeleteObject(); 
memDc.DeleteDC();
delete pDC;
pDC = NULL;

CRect rectprps;
rectprps.SetRect(0,325,545,391);
InvalidateRect(&rectprps,TRUE);//擦除区域
UpdateWindow();

我在OnTimer里面某一个定时器下编写上述代码,希望在定时到时,更新界面的数据,其中某一个区域是用图片的方式重绘,但是为什么想要形成图片刷新的区域没有任何显示?
------解决方案--------------------
LZ,你这段代码是放在哪里调用的?

既然画完成了,为什么还要调用: InvalidateRect 呢?
------解决方案--------------------
记得应该是

定时时间到 -> InvalidateRect -> OnPaint() or OnDraw()
------解决方案--------------------
 InvalidateRect 是会触发 WM_PAINT 事件,然后调用  OnPaint() 来处理的。
------解决方案--------------------
InvalidateRect 后一调用onpaint不就又从新刷新了吗?你的定时器处理数据并通知窗口重绘就好了,
画图放到onpaint里面去。
ps:代码有内存泄漏。
------解决方案--------------------
内存泄露,确实是存在的。例如:被选入 DC 的对象,是无法删除的,如: mempBitMap。必须先选出 DC,再 Delete。
------解决方案--------------------
用SaveDC,保存状态,然后恢复也可以。另InvalidateRect 也容易造成内存泄漏,因为wince在封装gdi时有bug。用纯API就不会。

你的区域我建议你只用一个CStatic,然后直接画上去,如果区域固定的话。因为我觉得你是在画曲线。
或者定义一个成员变量的内存DC,然后通知窗体画,好过你这样处理。
------解决方案--------------------
我不是特别清楚你在做的事情,只是觉得应该是根据数据一直在刷曲线,那么完全可以封装一个专门处理这部分图像的。这样数据丢给它,它就显示出来,多好,跟窗体就一点关系都没有了,同事如果多个地方需要用到也可以重复利用。