我在主框架类里,写了一个新建函数,分割窗口,
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
// TODO: Add your specialized code here and/or call the base class
if (!m_Splitter.CreateStatic(this, 1, 2))
{
TRACE0("Failed to CreateStaticSplitter\n");
return FALSE;
} // add the first splitter pane - the default view in column 0
if (!m_Splitter.CreateView(0, 0,
RUNTIME_CLASS(CTree), CSize(200, 50), pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
} if (!m_Splitter.CreateView(0, 1,
RUNTIME_CLASS(CBsis19View), CSize(0, 0), pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
    
// activate the input view
SetActiveView((CView*)m_Splitter.GetPane(0,0)); return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
然后在view类里写了一个画直线函数
void draw()
{
     CMainFrame* pMain;
CBsis19View p;
CDC* dc=pMain->m_Splitter.GetPane(0,1)->GetDC();
}
编译正确,运行,报错。
调试是 CDC* dc=pMain->m_Splitter.GetPane(0,1)->GetDC();
一句出错。。
大家给看看是什么问题呀。

解决方案 »

  1.   

    CMainFrame* pMain;
    CBsis19View p;
    CDC* dc=pMain->m_Splitter.GetPane(0,1)->GetDC();
    pMain=????
    pMain=DYNAMIC_DOWNCAST(CMainFrame,AfxGetMainWnd());
    ASSERT_VALID(pMain);
    if(NULL!=pMain)
    {
    ...
    }
      

  2.   

    在view类里写了一个画直线函数???既然在View类里,直接用GetDC()不爽吗?
      

  3.   

    同意 DentistryDoctor(雅克医生<医德,值得反思>) 
    很基础的问题
      

  4.   

    CView中不是有一个OnDraw函数吗?直接用pDC不就可以吗?
      

  5.   

    CMainFrame* pMain;
    CBsis19View p;
    CDC* dc=pMain->m_Splitter.GetPane(0,1)->GetDC();
    呵呵。
      

  6.   

    然后在view类里写了一个画直线函数
    void draw()
    {
         CMainFrame* pMain;
    CBsis19View p;
    CDC* dc=pMain->m_Splitter.GetPane(0,1)->GetDC();
    }不推荐这么做。通常的做法是通过调用共同的Document的UpdateAllViews方法来通知其他视图。
    参见
    http://msdn.microsoft.com/library/en-us/vccore/html/_core_drawing_in_a_view.asp
    http://msdn.microsoft.com/msdnmag/issues/04/05/CQA/
      

  7.   

    CMainFrame *pFrame = 
    (CMainFrame*)AfxGetApp()->m_pMainWnd;

    CNewClassDoc * pNewDoc;
    pNewDoc = (CNewClassDoc * )pFrame->GetActiveDocument();
    CView * pView;
    pView = (CView*) pFrame->m_Splitter.GetPane(0,2);
    pNewDoc->UpdateAllViews(pView);如此,调用对应view里的OnDraw函数了。
      

  8.   

    我是在view里写了画线函数,然后其他类调用的。,所以要取得,对应框架的dc来画线并显示上去,
    我是把窗口分成了,两个窗口,左边显示一个树型结构,右边显示,我在点击左边的结点时,要在右边画个东西,
    现在是画成了。但是一拖动窗口就,刷没了。不知道应该怎么办呀。