这个问题我以前回答过的,注意CWnd及其派生类不能在另外的线程中使用的。具体原理MSJ的97年有篇文章里讲过。

解决方案 »

  1.   

    >(希望大家不要提有关发消息的建议,不能走这条路!)
    你的程序没办法,只能走这条路;MFC的消息处理框架(快速消息处理)让CWnd对象只能在单个线程内生存。
      

  2.   

    不知道你为什么不能发消息?
    但我想还是有方法可以解决的
    解决方法:
    将主框架窗口的句柄作为参数传递给工作者线程。
    在工作者线程中使用
    CWnd::FromHandle(hwnd)得到指针就可以了。
      

  3.   

    to seman:
    不行的,这样的CWnd指针是不能downcast(因为它是新构造的临时CWnd对象,在OnIdle的时候要被释放掉的),还是只能用来发点消息而已。
      

  4.   

    在新线程中调用FromHandle与在原来的线程中调用是不一样的,如果在原来的线程里调用,就能做downcast,得到的是原来已有的CWnd对象的指针;但在另一个线程中确是新构造的一个CWnd对象。
      

  5.   

    是这样的吗,那就是说只能发消息了?
    我再搞一天,如果没有进展就给bugn分,不过也很感谢seman兄的关注!
      

  6.   

    算了,还是发消息吧!
    我已经把代码重写了,多谢大家的帮助。
    另外一个问题:
    在delete一个对象时出错一般有哪几种原因?