主窗体画一些图或字,但是如果主窗体上有其它窗体拖动,就会把下面画的东西给刷掉,即拖过的地方就变成窗体原来的灰白色,可是我是在主窗体OnPaint中画的,应该会及时刷新才对。有什么方法可以解决呢,请大家帮忙想想,谢谢!

解决方案 »

  1.   

    估计是主窗口没有收到WM_PAINT消息,仔细查一下消息循环
      

  2.   

    问题是我在拖动上面窗体时,比如AfxMessageBox,怎么给主窗体发刷新消息
      

  3.   

    你的主窗体是对话框么?能不能将你OnPaint中的内容贴出来看看那
      

  4.   

    CRect r;
    CBrush brush, brush1;
    brush1.CreateSolidBrush(COLORREF(0x0000ff));
    brush.CreateSolidBrush(COLOR_OVERYLAY);
    tFace.GetClientRect(&r); //tFace是用来画东西的区域
    CPaintDC dc(CWnd::FromHandle(tFace.m_hWnd));
    dc.SelectObject(brush);
    dc.FillRect(&r, &brush);
    DrawTitle(&r, nCamera, &dc); //画汉字 dc.SelectObject(&brush1);
    ReflashArea(&dc, &r); //画一些图(主要是线moveto lineto什么的)

    brush.DeleteObject();
    brush1.DeleteObject();
    ::ReleaseDC(tFace.m_hWnd, dc.m_hDC);
      

  5.   

    实际上我是在主窗体中用一个Static来画,刷新也是刷Static
      

  6.   

    建议你字写一个继承CStatic的类,如CNewStatic,在CNewStatic中的OnPaint中做你要做的事,这样就不会出现你所说的现象了。
      

  7.   

    大概你的OnPaint中有存在刷新的条件判断。
      

  8.   

    这个应该是放在WM_PAINT里面的。当窗体被覆盖主的时候,要发WM_PAINT消息的。
      

  9.   

    ronmal(新奇天空)
    你说的这个方法我也想过,不过并不能确定具体什么时候需要刷新,如果开个线程刷的话,可能会造成屏幕会一直在闪
      

  10.   

    你可千万不能在另一个线程里操作GDI,很容易死的(比如一旦出现争用同一个DC时就会发生)。
      

  11.   

    我现在不是用一个线程,而是通过捕捉上层窗体(如MessageBox)的WM_MOVE消息来刷新主窗体,但这样做有一个问题是,MessageBox每次移动后上一次停留的地方都刷新不了,这是什么问题,我一直找不出,谁能帮下忙呢?
      

  12.   

    建议你字写一个继承CStatic的类,如CNewStatic,在CNewStatic中的OnPaint中做你要做的事,这样就不会出现你所说的现象了。------------------------
    我还是建议你用这种方法试试!其实你自己捕捉看要不要刷新新窗口,倒不如让系统给你捕捉的好! 好运!
      

  13.   

    批准
    同意dirdirdir3(风)
    在WM_ERASEBKGND消息下画图