在其他窗口拖过程序控件时,控件不立即刷新,等停止拖动其他窗口时,控件才开始刷新
我的猜想:主窗口在重绘时,控件等不到重绘的消息。。但该如何解决该现象?还请有过类似经验的大虾指导。先谢过。

解决方案 »

  1.   

     
    OnErasbkgroud 中返回 TRUE
    调用UpdateWindow()函数   请教在哪调用?
      

  2.   

     控件都是自绘 继承于CWnd  请问如何定义当其它窗口经过时重绘。。 控件创建的样式WS_VISIBLE|WS_CHILD
      

  3.   

    WM_PAINT属于优先级比较低的消息,系统只会在消息队列里没有其他比他优先等级高的消息时才会处理,你的WM_MOUSEMOVE比WM_PAINT优先级高。
      

  4.   

     不会的,计算机的处理速度很快,在一个WM_MOUSEMOVE触发时,WM_PAINT还是会被处理
      

  5.   

    我也有类似的问题,就是在这个视图上的变化 发消息给其他视图更新 消息是发到了 然后invalidate了,但是只要鼠标不移动接收消息的视图 他就是不更新。只要鼠标移到了(WM_MOUSEMOVE)时才刷新,我也不知道为什么
      

  6.   

    每个视图我都invalidate了啊 为什么不更新呢?要等到鼠标已过去才 显示变化 真是令人费解的问题
      

  7.   

    应该不是不刷新,而是你移动的速度过快,而界面的控件又很多,导致刷新不过来
    可以做下试验:你用一个控件,用程序控制他不停的movewindow,就会刷新不过来
      

  8.   

    已经试验过   不是控件多的问题,应该是逻辑问题或者是样式的问题吧,,主窗口样式我用的是WS_OVERLAPPEDWINDOW,控件是继承CWnd的自绘控件,样式是WS_VISIBLE|WS_CHILD。
      

  9.   

    设置控件的父窗体风格带有:WS_CLIPCHILDREN | WS_CLIPSIBLINGS
      

  10.   

    简单的测试了一下,标准控件也会这样。还是上代码BOOL CSkinTestDlg::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRect rcClient;
    GetClientRect(&rcClient);
    Graphics graphic(pDC->GetSafeHdc());
    Rect rc;
    rc.X = 0;
    rc.Y = 0;
    rc.Width = rcClient.Width();
    rc.Height = rcClient.Height();
    Bitmap bmp(_T("a.bmp")); graphic.DrawImage(&bmp,rc,0,0,rc.Width,rc.Height,UnitPixel);
    return TRUE;
    }
      

  11.   

    尽量别在WM_ERASEBKGND里面做吧,效率不怎么样,这样消息太频繁了。
      

  12.   

    确实 可以在OnPaint里。另外:
    问题解决了。
    问题出在,graphic.DrawImage(&bmp,rc,0,0,rc.Width,rc.Height,UnitPixel);
    GDI+的效率问题,导致控件不能及时重绘。