如此实现图形移动出现的有关问题,请教怎么解决

如此实现图形移动出现的问题,请问如何解决
有下面的实现图形移动的程序:

//绘制图形
CRect   DrawHospital(CDC   *pDC,   POINT   pos,   float   fScaleSize,   int   nDrawMode)  
{  
CRect   rect;  
rect.left   =   pos.x;  
rect.right   =   (long)(pos.x   +   48   *   fScaleSize);  
rect.top   =   pos.y;  
rect.bottom   =   (long)(pos.y   +   48   *   fScaleSize);  
int   nOldR2Mode;  
if   (!nDrawMode)  
{  
nOldR2Mode   =   pDC-> SetROP2(R2_NOT);  
}  

int   nOldMode   =   pDC-> SetBkMode(TRANSPARENT);  
CGdiObject   *pOld   =   pDC-> SelectStockObject(NULL_BRUSH);  
CBrush   brush;  
if   (nDrawMode   ==   1)  
{  
brush.CreateSolidBrush(COLOR_HOSPITAL);  
}  
else  
{  
brush.CreateSolidBrush(COLOR_SELECTED);  
}  
CRect   rectFill;  
rectFill.left   =   (long)(pos.x   +   16   *   fScaleSize);  
rectFill.top   =   pos.y;  
rectFill.right   =   (long)(pos.x   +   32   *   fScaleSize);  
rectFill.bottom   =   (long)(pos.y   +   48   *   fScaleSize);  
pDC-> FillRect(rectFill,   &brush);  
rectFill.left   =   pos.x;  
rectFill.top   =   (long)(pos.y   +   16   *   fScaleSize);  
rectFill.right   =   (long)(pos.x   +   48   *   fScaleSize);  
rectFill.bottom   =   (long)(pos.y   +   32   *   fScaleSize);  
pDC-> FillRect(rectFill,   &brush);  
pDC-> SelectObject(pOld);  
pDC-> SetBkMode(nOldMode);  

if   (!nDrawMode)  
{  
pDC-> SetROP2(nOldR2Mode);  
}  

return   rect;  
}  

//移动图形
void   MoveHospital(CView   *pView,   HOSPITAL   *pHos,   POINT   posJumpOff,   POINT   posDestination)  
{  
pHos-> pos   =   posDestination;  
CRect   oldRect   =   DrawHospital(pView-> GetDC(),   posJumpOff,   pHos-> fSize,   0);  
CRect   newRect   =   DrawHospital(pView-> GetDC(),   posDestination,   pHos-> fSize,   2);  
//pView-> InvalidateRect(oldRect);  
//pView-> InvalidateRect(newRect);  
}  

如果按照鼠标左键按下开始移动,鼠标移动时清除上次所绘制的图形,鼠标弹起时在该处绘制,会出现的问题是:鼠标移动的过程中看不到所绘制的图形,直到鼠标左键弹起时才能看到完整的图形,请问如何解决这个问题,谢谢!


------解决方案--------------------
方案一
onmousemove 事件函数中
计算移动后的图形位置,
在最后
调用 RedrawWindow();

onpain 事件函数

先建立内存DC
在 内存DC 全部重画

最后将其贴入窗体DC

------解决方案--------------------
方案二
onmousemove 事件函数中
计算出移动之前的图像位置
计算移动后的图形位置,
计算出两个图像区域的并集别A
在最后
调用 RedrawWindow(A,....),这个并集代表要更新的区域;

onpain 事件函数

先建立内存DC
在 内存DC 全部重画
用 CPaintDC 获取DC
最后将其贴入窗体DC