解决方案 »

  1.   

    不要去尝试做这样的东西, 因为默认的控件有些地方绘制, 根本不会依赖于WM_PAINT消息和WM_NCPAINT消息,
    这就导致在某些情况下会显示出默认的控件.所以还是按标准的做法来自绘吧.  或者直接从窗口类派生来做.
      

  2.   


    亲,你看清楚我上面写的内容了木有?本来我的控件重绘就是派生CTreeCtrl类的。我的线程只是用来控制上面时候要刷新一次而已
      

  3.   

    PostMessage一个自定消息到UI线程
    或者直接InvalidateRect(HWND);创建线程的时候将窗口句柄HWND作为线程函数的参数传递给线程
      

  4.   

    InvalidateRect这个函数中参数不是HWND类型,是LPRECT类型,请问这个RECT的值如何获取?
      

  5.   

    InvalidateRect这个函数中参数不是HWND类型,是LPRECT类型,请问这个RECT的值如何获取?
    你创建线程的时候直接将CTreeCtrl控件的HWND传递给线程不就行了,LPRECT写NULL即可。
      

  6.   


    没用的,也是一样的会报错PostMessage(WM_PAINT, 0, 0) 和SendMessage都试过了。InvalidateRect也试过了,还是报错啊 ...
      

  7.   


    没用的,也是一样的会报错PostMessage(WM_PAINT, 0, 0) 和SendMessage都试过了。InvalidateRect也试过了,还是报错啊 ...
    InvalidateRect()肯定是可行的,是你的代码写的有问题吧~
      

  8.   

    1 线程中Invalidate(); 不可以;因为线程没有this
    2.线程中:: InvalidateRect(hWnd) 需要对话框的 hwnd 自定义一个消息 , post 这个消息到对话框.对话框可以直接调用 OnPaint
      

  9.   

    在你的自定义类中映射一个自定义消息  USERMESSAGE_1 ,在消息函数中调用Invalidate在你的线程中向自定义类  ::PostMessage(传给现程的句柄,USERMESSAGE_1, 0,0)MFC的界面控件大部分不支持多线程操作。
      

  10.   


    没用的,也是一样的会报错PostMessage(WM_PAINT, 0, 0) 和SendMessage都试过了。InvalidateRect也试过了,还是报错啊 ...
    InvalidateRect()肯定是可行的,是你的代码写的有问题吧~嗯啊,先看看是不是我的代码有问题。但是我不用Invalidate,一直运行,运行多久都不会报错。
      

  11.   

    你是用  “bRefresh是一个全局的BOOL变量”  的吧 ?
    volatile BOOL bRefresh;
    界面 查  bRefresh。
      

  12.   


    对我的全局变量 BOOL bRefresh有争议? 这个值是能正常赋值和获取的 。
      

  13.   


    我只是用这个标记来控制什么时候需要重绘而已,这个应该没有问题吧?而且这是BOOL值是手动修改的。