在Dialog里SetScrollPos 后,在onPaint里,dc的坐标原点没有改变。dc.Rectangle( CRect( 0, 0, 200 , 200));当移动后,依然画在了原点上。

解决方案 »

  1.   

    CWnd::SetScrollPos
    This method sets the current position of a scroll box and, optionally, redraws the scroll bar to reflect the new position of the scroll box. Setting bRedraw to FALSE is useful whenever the scroll bar will be redrawn by a subsequent call to another function.
    这个设置不会影响DC坐标原点
      

  2.   

    那有什么稀奇的。本来就是这样。对话框不是视图,没有OnPrepareDC帮你调整。用LPToDP转换一下你这个矩形,然后再用dc绘制
      

  3.   

    那我在OnPaint中每次做OnPrepareDC 中改变原点的操作也可以吧?
      

  4.   

    OnPrepareDC是视图类的函数,不是对话框的函数......
      

  5.   


    我的意思是下面这样,放到我程序里,达到效果了。 CPaintDC dc(this); // device context for painting
    dc.SetWindowOrg( GetScrollPos( SB_HORZ), GetScrollPos( SB_VERT));
    // TODO: Add your message handler code here
    CBrush * pOldBr = dc.SelectObject( &m_brBg);
    CRect rcClip;
    dc.GetClipBox( rcClip);// dc.FillRect( rcClip, &m_brBg);
    dc.Rectangle( CRect( 0, 0, 200 , 200));
    dc.SelectObject( pOldBr);
      

  6.   


    void CLogiShowArea::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    dc.SetWindowOrg( GetScrollPos( SB_HORZ), GetScrollPos( SB_VERT));
    // TODO: Add your message handler code here
    CBrush * pOldBr = dc.SelectObject( &m_brBg);
    CRect rcClip;
    dc.GetClipBox( rcClip);// dc.FillRect( rcClip, &m_brBg);
    dc.Rectangle( CRect( 0, 0, 200 , 200));
    dc.SelectObject( pOldBr);
    }
      

  7.   

    CPaintDC dc(this); // device context for painting
        // TODO: Add your message handler code here
        CBrush * pOldBr = dc.SelectObject( &m_brBg);
        CRect rcClip(0,0,200,200);
        dc.LPToDP(&rcClip);
       dc.FillRect( rcClip, &m_brBg);
          dc.SelectObject( pOldBr);
    这样行不行?
      

  8.   

    谢谢 happyparrot,你弄过窗口的透明效果吗?有一个窗口(B)我用一个部分透明的png做一个窗口的背景。在窗口移动的时候透明部分总是有父窗口(A)的内容。我在A窗口上放了一个菜单,菜单响应弹出一个对话框。但在设置了窗口B的WS_EX_LAYERED,弹出的对话框不见了。并且也点不了其它地方。按Enter会响应。弹出的Dialog确定是画出来了。纳闷中