我在主程序MainFrm.cpp中分割2X1窗口,左边二行,右边一列,然后启动线程tread.
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext)
{//分割2X1窗口,左边二行,右边一列;左上行是CMytoolView,左下行是infoscrol,右边一列是CAdver1
    CRect rect;
   GetClientRect(&rect);
    if(m_wndSplitter1.CreateStatic(this,1,2)==NULL) return FALSE;
    m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CAdver1),CSize(rect.Width()/4,rect.Height()),pContext);
    if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))==NULL)//从第一次分割的窗口中,再分割
  return FALSE;
  m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CMytoolView),CSize(rect.Width()*3/4,rect.Height()*4/5),pContext); 
  m_wndSplitter2.CreateView(1,0,RUNTIME_CLASS(infoscrol),CSize(rect.Width()/4,rect.Height()*1/5),pContext);   m_wndSplitter1.SetColumnInfo( 0,rect.Width()*3/4,0 );//m_wndSplitter1是父窗口,如果对m_wndSplitter2进行列操作是不能分割这里的列宽度,因为列分割是由m_wndSplitter1产生的。
m_wndSplitter1.RecalcLayout();
pt=*pContext;//保留三分视图的上下文,在mytoolview.cpp中(数据流检测)变更视图类型时使用
  return TRUE;//不再调用基类的OnCreateClient函数//   return CFrameWnd::OnCreateClient(lpcs, pContext);
}int CMainFrame::OnEditBook()//我自己定义的一个函数
{
  AfxBeginThread(tread,this); //启动线程
}UINT tread(LPVOID pParam)//子线程
{
CMainFrame* mt=(CMainFrame*)pParam;
CMytoolView* ct=(CMytoolView*)mt->m_wndSplitter2.GetPane(0,0);
//程序运行到上面这句,就会提示出错 wincore.cpp line 894
}
程序在Debug状态下编译全部通过,运行时,就会提示出错wincore.cpp line 894。难道CMytoolView* ct=(CMytoolView*)mt->m_wndSplitter2.GetPane(0,0);不能这么使用吗?

解决方案 »

  1.   

    =(CMytoolView*)mt->m_wndSplitter2.GetPane(0,0); 
    一步步分开获取各个对象,看是否获取正确的对象..
      

  2.   

    FRAME直接转换成VIEW?!还没看到过
      

  3.   

    我用CSplitterWnd qt=mt->m_wndSplitter2;
    编译提示错误:initializing' : cannot convert from 'class CSplitterWnd' to 'class CSplitterWnd'
    这是为什么?怎么解决?
    难道就是因为这个,引起程序运行中出错?