我的程序自动生成了CLeftView(派生自CTreeView)和CMyView(派生自CListView),现在问题:
第一:我在CMainFrame类中改变了CLeftView中的数据库,因此,希望更新CLeftView中的树视图,同时更新CMyView的列表视图。说简单点是:我现在不知道应该在什么地方获得怎样获得CLeftView的指针和CMyView的指针?第二:我在CLeftView树视图中点击某一项目时,如何同时更新CMyView的列表视图?第三:有什么书可以帮助我更好的解决这些问题?

解决方案 »

  1.   

    1. 在MainFrame里面
    2。由leftview向mainframe发送自定义消息,然后mainframe负责更新myview列表
      

  2.   

    我可以给以一个代码,实际上就是,如何在分割窗口中通信的问题
    -------------------------
    代码就是和你的程序一样的一个demo
    [email protected]
      

  3.   

    if you use splitter window ,you can get view point like this
    CMyListView* CMainFrame::GetRightPane()
    {
    CWnd* pWnd = wndSplitter.GetPane(0, 1);
    CMyListView* pView = DYNAMIC_DOWNCAST(CMyListView, pWnd);
    return pView;
    }
    and you can deal with it now...
      

  4.   

    你可以用分割条m_spliderWnd对象的GetPane()函数得到左视图和右视图,
      

  5.   

    可以使用CDocument::UpdateAllViews(),
      1. 在CMainFrame中,调用GetActiveDocument()->UpdateAllViews();
      2. 在LeftView中响应TVN_SELCHANGED消息,调用GetDocument()->UpdateAllViews();
      3. 不知道,或许,MSDN和《深入浅出MFC》可以吧。
      每次调用UpdateAllViews(CView* pSender, LPARAM lHint, CObject* pObject)时,可以设置不同的参数,在每个CView::OnUpdate()中,根据参数来判断是否需要更新,怎样更新。
    我是这么做的。
      

  6.   

    to kingzai(studying C#)wndSplitter.GetPane(0, 1);得到右视图,那在ManiFrame里又怎样得到左视图,如果这样wndSplitter.GetPane(0, 0);得到左视图可以吗?
    2。得到了由视图(列表空间)后,在双击列表视图时,如何得到当前双击的项目的名称?
    3。列表项目中的参数如何传递。
    kingzai(studying C#)
    多谢你已经为我解决了最初提出第二个问题...
      

  7.   

    1.yes,you can get first view by this way
    2.use HitTest,this is my code example
    void CProjectTreeView::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    CCDEApp*pApp=(CCDEApp*)AfxGetApp();
    BOOL nSelect;
    HTREEITEM hItem = HitTest(point, &nFlags);
    if ((hItem != NULL) && (TVHT_ONITEM & nFlags))
    {
    nSelect=Select(hItem, TVGN_CARET);
    }
    CString ItemText;
    ItemText=GetItemText(hItem);
    if(nSelect == 1)
                     ...
     }
    3.sendMessage ,use wparam and lparam.
      

  8.   

    高手
    kingzai(studying C#) 刚才忘了问一个问题:
    单击列表控件的列时,如何对项目进行重新排序?多谢提供参考代码!!!
      

  9.   

    CLeftView *pLeftView=(CLeftView*)wndSplitter.GetPane(0, 0);
    CMyView *pRightView=(CMyView*)wndSplitter.GetPane(0, 1);void CMyView ::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    int i=pNMListView->iItem;
             if(-1!=i)
               {
                  CListCtrl& lst=GetListCtrl();
                  MessageBox(lst.GetItemText(i,0));
                } 
    *pResult=0;
    }列表控件排序的问题可看下面的网页,里面有解释与代码.
    http://www.copathway.com/vchelp/zart/sortl.asp?type_id=9&class_id=1&cata_id=1&article_id=73