我的目的是在视图中显示一个位图,并拖动
用的是单文档视图类
加载了OnPaint()并在其中调用了OnDraw()OnDraw()里是绘制位图其中
void CEx10bView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
if(m_bCanMove)
{
m_pointWeave=point;
m_rectWeave=CRect(point.x,point.y,point.x+m_rectWeave.Width(),point.y+m_rectWeave.Height());

CClientDC dc(this); //用一下方法触发重绘
//Invalidate();//正常工作
//PostMessage(WM_PAINT,0,0);//不触发重绘
//OnPaint();//不触发重绘
                //UpdateWindow()//不触发重绘
}
CScrollView::OnMouseMove(nFlags, point);
}以上几个方法触发重绘怎么会有的不能正常工作,
我也使用过部分重绘,可以正常完成
请大家解释下,谢谢啦

解决方案 »

  1.   

    //Invalidate();//正常工作 
    1.Invalidate相当于先发送WM_ERASEBKGND and WM_NCPAINT 然后在发送WM_PAINT消息。//PostMessage(WM_PAINT,0,0);//不触发重绘 
    2.你可以先发送WM_ERASEBKGND然后再发送WM_PAINT消息//OnPaint();//不触发重绘
    //UpdateWindow()//不触发重绘 
    3.这两个函数也只是发送了WM_PAINT消息,没有发送WM_ERASEBKGND
      

  2.   

    后面的那几个,在无效区不为空时才有效。实际上,这两个
    //PostMessage(WM_PAINT,0,0);//不触发重绘 
    //OnPaint();//不触发重绘 
    已经进OnPaint函数了,只是无效区为空,不会产生任何影响