工作线程中部分代码:
     CMainFrame   *pWnd = (CMainFrame*)(AfxGetApp()->m_pMainWnd);  
      CMyMainFormView *pview=(CMyMainFormView *) pWnd->m_wndSplitter.GetPane(0,0);
在mfc一个工作线程中,用AfxGetApp()->m_pMainWnd得到主线程窗口句柄.
CMyMainFormView *pview=(CMyMainFormView *) pWnd->m_wndSplitter.GetPane(0,0);这句会出错.
但在主线程中,该语句不会出错.
另AfxGetMainWnd()在工作线程不起作用的.

解决方案 »

  1.   

    AfxGetMainWnd() 获得窗口句柄通过线程函数参数LPVOID lpParam传递进去,在线程中转换回来用
    操作UI,可以发送消息给主窗口来处理 PostMessage,这样使用比较规范
      

  2.   

    用AfxBeginThread创建的线程才可以用Afx开头的函数。
    把“AfxGetApp()->”改成“theApp.”。
      

  3.   

    把CMainFrame的指针作为参数传进去
      

  4.   

    线程是用AfxBeginThread创建的,cmainframe 能正常得到...但分割窗口
    CMyMainFormView *pview=(CMyMainFormView *) pWnd->m_wndSplitter.GetPane(0,0); 
    在工作线程中得不到...传参数..那有分割两个指针了...还要定义结构体吧...
      

  5.   

    所以你最好还是在工作线程中给你的CMainFrame发送一个消息,在它的消息响应函数中来处理你的CMyMainFormView
      

  6.   

    可以利用线程回调函数的参数传入窗口指针.建议楼主看一下《win32多线程程序设计》第10章
    http://search.download.csdn.net/search/win32%E5%A4%9A%E7%BA%BF%E7%A8%8B%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1
    下载区有: