我在SDI中分割视图如下:
先创建一视图类:CView1 ;
然后重载OnCreateClient,分割视图
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{ if(m_wndSplitter.CreateStatic(this, 1, 2))
{
CRect rect ;
GetClientRect(&rect) ;
CSize size = rect.Size() ;
size.cx -= 350 ;
if(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CView1), CSize(300, 0), pContext))
{
if(m_wndSplitter.CreateView(0, 1, pContext->m_pNewViewClass, CSize(0, 0), pContext))
{
SetActiveView((CView*)m_wndSplitter.GetPane(0, 1)) ;
return TRUE ;
}
}
}
return FALSE ;
}问题是,如何在新建类CView1中获得文档类的指针,我想象向导生成的如下的代码一样,来获得文档类的指针:
在视图类头文件中:
public:
CChatDoc* GetDocument();
...
#ifndef _DEBUG  // debug version in chatvw.cpp
inline CChatDoc* CChatView::GetDocument()
   { return (CChatDoc*)m_pDocument; }
#endif在实现文件中:
CChatDoc* CChatView::GetDocument() // non-debug version is inline
{
return STATIC_DOWNCAST(CChatDoc, m_pDocument);
}还有一问:如何将新建的视图类附加到已存在的文档类、框架类呢?

解决方案 »

  1.   

    要想用GetDocument()获得文档类的指针,要先把view加入文档,用
    void CDocument::AddView( CView* pView );
    就可以了
      

  2.   

    在分割窗口获得视图类指针用CSplitterWnd::GetPane();
    获得文档类指针用GetDocument();
      

  3.   

    CXXXDoc *pDoc=GetDocument();
    pDoc->XXX
      

  4.   

    CXXXDoc *pDoc=GetDocument();
    pDoc->XXX
      

  5.   

    CXXXDoc *pDoc=GetDocument();
    pDoc->XXX
      

  6.   

    只要是在下面这个函数中
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)创建的VIEW,都可以直接为该添加一个函数即你说的:
    public:
    CChatDoc* GetDocument();
    ...
    #ifndef _DEBUG  // debug version in chatvw.cpp
    inline CChatDoc* CChatView::GetDocument()
       { return (CChatDoc*)m_pDocument; }
    #endif在实现文件中:
    CChatDoc* CChatView::GetDocument() // non-debug version is inline
    {
    return STATIC_DOWNCAST(CChatDoc, m_pDocument);
    }因为OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)中
    默认的pContext结构已确保该VIEW与DOC的关联。无需再使用
    void CDocument::AddView( CView* pView );
      

  7.   

    原来CView类中本来就有此函数GetDocument(),不必自已写
    学习学习
    谢谢各位了。