如图所示。http://att.newsmth.net/att.php?p.187.252896.1124.JPG
源代码地址:http://www.newsmth.net/bbscon.php?bid=187&id=252897
我建立了一个SDI的文档视图工程。基本视图继承于CFormView,用来显示图形。
左边视图CLeftView继承于CTreeView用来显示树结构。右下视图是个框架类,其中包含三个视图CMyView1,CMyView2,CMyView3分别继承于CListView,CView,VListView。
我现在想实现的是,选择左视图中的选项,如何使得右下视图中View1跟着变化。
也就是要实现左视图和右下视图中的View1视图的通信。
在左视图中,下面这个函数怎样添加代码才能使其于右下视图中的View1通信?
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
    CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
    HTREEITEM select_item=CtlTree.GetSelectedItem ();
    CString str=CtlTree.GetItemText (select_item);
    /*
         添加的代码
         */
    *pResult = 0;
}
我想让其建立 通信后,执行CMyView1::OnInit1(CString strInfo)这个函数。
谢谢大家了

解决方案 »

  1.   

    可以在CMainFrame中在创建各个视图后保存这些视图的指针。
      

  2.   

    两个视图通信的方式有多种,可以在其中一个中暴露相应的接口,供另一个调用,也可以通过CMainFrame中转,还可以发送自定义消息,看你想怎么用。
      

  3.   

    void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 

        NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
        // TODO: Add your control notification handler code here 
        CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl (); 
        HTREEITEM select_item=CtlTree.GetSelectedItem (); 
        CString str=CtlTree.GetItemText (select_item);     //获取MainFrame指针
        CMainFrame *pMainFrm = (CMainFrame*)AfxGetMainWnd();
       //假设你是静态切分的  定义的CSplitterWnd  m_wndSplit;
       //获取VIEW1的指针
        CMyView1   *pView1  = (CMyView1*)pMainFrame->m_wndSplit.getpane(1,0);
        //然后你写一个能在VIEW1上绘制的函数在VIEW1中 假设是Draw
        pView->Draw();    /* 
            添加的代码 
            */ 
        *pResult = 0; 

    大概就这样,具体的你就自己琢磨下!