我在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);
}还有一问:如何将新建的视图类附加到已存在的文档类、框架类呢?
先创建一视图类: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);
}还有一问:如何将新建的视图类附加到已存在的文档类、框架类呢?
void CDocument::AddView( CView* pView );
就可以了
获得文档类指针用GetDocument();
pDoc->XXX
pDoc->XXX
pDoc->XXX
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 );
学习学习
谢谢各位了。