CMainFrame中:
    CSplitterWnd   m_wndSplitter1; 
   BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
// TODO: Add your specialized code here and/or call the base class
if(m_wndSplitter1.CreateStatic(this,1,2)==NULL)     
        return   FALSE;   
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CTrainView),CSize(530,400),pContext); 
    m_wndSplitter1.CreateView(0,1,RUNTIME_CLASS(CDigitalView),CSize(0,400),pContext); 
    return   TRUE;   
}
其中CTrainView是单文档自动生成的View类,DigitalView是自己新建的一个View类函数:void CMainFrame::ShowInfo()
{
 CTrainView* pAnalog=(CTrainView*)m_wndSplitter1.GetPane(0,0);
 CDigitalView* pDigital=(CDigitalView*)m_wndSplitter1.GetPane(0,1); if(pAnalog!=NULL)
{
pAnalog->PostMessage(SHOW_ANALOG,0,0);//自定义消息,去CTrainView类中显示一些数据
}
 if(pDigital!=NULL)
{
pDigital->SendMessage(SHOW_DIGITAL,0,0);//自定义消息,去CDigitalView类中显示一些数据
}
}
产生错误,debug Assertion Failed!
          wincore.cpp  Line:894
起初没有分割窗口时,ShowInfo函数是这样的,
void CMainFrame::ShowInfo()
{
   CTrainView* pAnalog=(CTrainView*)GetActiveView();   if(pAnalog!=NULL)
{
pAnalog->PostMessage(SHOW_ANALOG,0,0);//自定义消息,去CTrainView类中显示一些数据
}
}此时就是正确的。
不知为何,分割窗口之后就不对了,请大家帮帮忙!谢谢

解决方案 »

  1.   

    CSize(0,400)是不是指定宽和高?
    0在debug下会有一个断言失败,但是不影响啥
    改成1试试
      

  2.   

    分割窗口之后,GetActiveView有可能返回的不是你需要的对象。这种方式最好在文档类中用UpdateAllViews来实现刷新特定视图。
      

  3.   

    GetActiveView的时候没错,此时还没有分割窗口
    问题是我分割窗口后,获得分割后的窗口就错了!
    CTrainView* pAnalog=(CTrainView*)m_wndSplitter1.GetPane(0,0); 
    CDigitalView* pDigital=(CDigitalView*)m_wndSplitter1.GetPane(0,1); 
      

  4.   

    我按你上面的方法做了一下,我发现窗口分割没有什么问题呀.然后我也加了你上面的那个ShowInfo() 的函数,也没有发现什么问题,编译可以通过,程序也正常运行.只是拆分的两个视图中都没有什么数据显示.你可以先把你的ShowInfo() 函数删除,编译一下,看运行后有没有什么问题.
       另外我上面加的另一个类是基于CView的,你加的那个是基于哪个类的呢?
      

  5.   

    我把showInfo内容注释掉后,也没有问题。但是加上就有问题,为什么呢?
    我的两个VIew类是基于CListView的,这个没关系。我自己新建一个工程实现,ShowInfo中投递两个消息,都是正确的。