放大镜的有关问题,高手帮忙

放大镜的问题,高手帮忙啊
我想用如下的方法实现放大镜,在onpaint()中用2个StretchBlt函数。鼠标移动,可以改变StretchBlt的显示范围:
 dc.StretchBlt(0,0,600,800,&m1,0,0,1200,1600,SRCCOPY);//显示大的图
 dc.StretchBlt(point.x,point.y,100,100,&m1,point.x , point.y ,50,50,SRCCOPY);//为放大后的图,放大一倍
 移动鼠标实现放大功能,显示成功。但是,重绘的时候闪的厉害,放大镜一直闪烁。请问如何解决?
 


------解决方案--------------------
1.WM_ERASEBKGND事件返回TRUE
2.双缓存,保证pDC输出图片为一次性,这样眼睛不感觉不到闪烁了
------解决方案--------------------
鼠标移动时要重设重绘区。
如放大后的图右移20pix那么,重绘区是放大后的图加左边的20pix

------解决方案--------------------
大概:
1。
//new clip region
rc.left=(tmpL < m_BallX) ? tmpL : m_BallX;
rc.right=(tmpR > (m_BallX + BALLSIZE)) ? tmpR : m_BallX + BALLSIZE;
rc.top=(tmpT < m_BallY) ? tmpT : m_BallY;
rc.bottom=(tmpB > (m_BallY + BALLSIZE)) ? tmpB : m_BallY + BALLSIZE;
// redraw
InvalidateRect(hWnd,&rc,TRUE);
2。WM_ERASEBKGND
// new ball needs not to erase bkgnd !
#if 1 // change to 0 , you can see glitch inside the moving ball.
GetClipBox(hdc,&rc);
if(rc.right !=0)// not empty !
{//the clip
hrgnc=CreateRectRgn(rc.left, rc.top, rc.right, rc.bottom);
hrgnb=CreateEllipticRgn(m_BallX, m_BallY, m_BallX+BALLSIZE, m_BallY+BALLSIZE);
CombineRgn(hrgnc,hrgnc,hrgnb,RGN_XOR);
// new clip region
SelectClipRgn(hdc,hrgnc);
}
#endif
3。WM_PAINT
放大后的图
------解决方案--------------------
参考我的‘桌面小球.zip ’0分。
http://download.csdn.net/detail/schlafenhamster/4362660
其中的:
DeskBallCli
------解决方案--------------------
http://download.csdn.net/download/liubin19821118/1047140