如题,我SDI分割后是这样的:
------------------------------- ¦ 
------------------------------- ¦ 
            ¦                       ¦ 
TreeView ¦  ListView(b)          ¦ 
           ¦                       ¦ 
   (a)    ¦                       ¦ 
          ¦-------------------- ¦ 
         ¦                       ¦ 
         ¦  FormView(c)       ¦ 
         ¦                       ¦ 
         ¦                       ¦ 
------------------------------- ¦ 我在CMainFrame::OnCreatClient()中填了如下代码:

        m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(C*TView),CSize(rect.Width()/4,rect.Height()),pContext);
m_wndSplitter1.CreateStatic(&m_wndSplitter,2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0,1));
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(C*LView),CSize(rect.Width(),3*rect.Height()/4),pContext);
m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(C*BView),CSize(rect.Width(),rect.Height()/4),pContext);
在(a)TreeView中OnInitialUpdate()中的调用函数初始化TreeCtrl,目录是从mdb文件中用Ado读取的,我希望所有叶节点和ListView中ListCtrl中每一行(报表型List)关联起来,界面操作起来效果是:当单击每一Tree叶节点时,ListCtrl中只有与之关联的那一行处于高亮选中状态. 我还想在TreeView中右键菜单选择增加删除节点,增加删除节点后ListCtrl也要及时增加或删除一项作为响应.  有人做过这种界面吗?我是新手,欢迎各位积极发言,分不够可以再加.

解决方案 »

  1.   


    pContext 这个参数 好好设计一下.在里面做点手脚.或者 最简单的办法就是设一个全局变量.
      

  2.   

    自定义消息!1、创建后,把各自的窗口句柄传给对方,然后响应事件的时候可以直接向目标窗口投递;
    2、通过CMainFrame中转,都把消息投递给这个框架,然后由框架来转发。 
      

  3.   

    能不能给点具体介绍一下pContext这个结构,谢谢
      

  4.   

    我试过在NM_CLICK事件处理中加入以下代码:    CIMedLView* pView = (CIMedLView*)(((CMainFrame*)AfxGetMainWnd())->m_wndSplitter1.GetPane(0,0)); ::SendMessage(pView->m_hWnd,NM_CLICK,0,0);但是不行,在ListView中怎么响应消息处理,怎么处理,希望给点具体代码,多谢!
      

  5.   

    不行那是因为你没有在LISTVIEW中映射这个消息。同时你用的这个固有的消息,必须要把参数设置正确。至于参数的意义可以参考MSDN。建议你最好是用自定义消息!
      

  6.   

    照你说NM_CLICK是ListCtrl控件的点击事件啊,我在ListView中OnInitialUpdate()中加入了以下代码:
    m_ctrlList.SetItemState(1, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
    m_ctrlList.EnsureVisible(1, false); 
    m_ctrlList.SetFocus(); 但是并没有使ListCtrl一行高亮选中,怎么在消息中指定ListCtrl的某一项呢?
      

  7.   

    兄弟:我看不到你发的什么消息啊!可能是系统出故障了吧?消息不是你这样做的。1、这篇文章是有关自定义消息的:
    http://www.vckbase.com/document/viewdoc/?id=13362、定义了消息以后,就涉及到要传些什么参数了。根据你的描述,可以把选中的叶结点的字符串当作参数传递给该消息,然后在消息处理函数中查找与该字符串关联的行,并将它高亮显示。
      

  8.   

    首先谢谢你的答复, 然后我查MSDN的时候发现ON_NOTIFY是针对控件的消息映射,不知道是不是应该用呢?
      

  9.   

    比如你定义了消息:#define WM_TREE_SELCHANGE WM_USER + 100然后用WPARAM来传递该字符串,则在TREE中发送:char chText[256]; // 这里放你选中结点的文字
    ::SendMessage(m_wndView, WM_TREE_SELCHANGE, WPARAM(chText), 0);
    上面这句要确保窗口句柄为LISTVIEW的窗口句柄.
    在LISTVIEW中处理:
    LRESULT CYourListView::OnTreeSelChange(WPARAM wParam, LPARAM lParam)
    {
        char *pSelText = (char*)wParam;
        // 这里根据pSelText来确定哪一行该选中:
     
        return 0L;
    }