用静态分割的方法,左边一个TREEVIEW,右边一个LISTVIEW。
TREEVIEW里面用
void MyTree::OnInitialUpdate() 
{
CTreeView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
(CTreeCtrl&)treectrl=(CTreeCtrl&)GetTreeCtrl();
DWORD dwStyles=GetWindowLong(treectrl.m_hWnd,GWL_STYLE);//获取树控制原风格
dwStyles|=TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT;
SetWindowLong(treectrl.m_hWnd,GWL_STYLE,dwStyles);//
}
这样的方法生成的一个TREECTRL,同样的方法在LISTVIEW里面生成一个LISTCTRL,但我发现这两个CTRL都没有成为类成员变量,所以不知道怎么让TREECTRL的消息处理函数里对LISTCTRL进行操作。请教了

解决方案 »

  1.   

    更正一下:CTreeCtrl &treectrl=(CTreeCtrl&)GetTreeCtrl();
      

  2.   

    http://topic.csdn.net/u/20100817/15/7a9e1206-68a5-4976-9ed4-12066cfe80b5.html里面的“无文档关联视图之间的通信”一段,就是解决这个问题的,得到视图类的指针,然后继续使用=(CTreeCtrl&)GetTreeCtrl()之类的函数就行了,反正是取引用。考虑是CTREEVIEW内部“集成”了CTREECTRL的原因,通理CLISTVIEW和CLISTCTRL。
      

  3.   

    通过消息传递的方式。举个例子说明:
    比如说你将窗口拆分成了A和B两部分。在A中有一个button,B中有一个文本框,你希望A中的button按下去之后B中的静态文本(假设你已经将这个静态文本关联成了一个CString对象m_static_text)就显示一行字。那么你在A所对应的View类里先写出button的onlbuttondown()函数,在这个函数中向B类所在窗口发送一个消息。CMainFrame* p= (CMainFrame*)AfxGetApp()->m_pMainWnd;
    //p是指向CMainFrame的指针,头文件中记得#include "MainFrm.h"::PostMessage(Splitter.GetPane(0,0)->m_hWnd,0x300,0L,0L);//向B所在的拆分子窗口发送0x300消息(假设B的窗口是(0,0),Splitter是你用来做拆分的CSplitterWnd对象);
    //在B的消息响应函数中响应0x300消息。其实就是重载DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam){
    switch(message) 

    case 0x300:
    {
    m_static_text="你要显示的字";
    break;
    }}
    }
      

  4.   

    ::PostMessage(Splitter.GetPane(0,0)->m_hWnd,0x300,0L,0L);这句命令改一下,加上指针p。
    ::PostMessage(p->Splitter.GetPane(0,0)->m_hWnd,0x300,0L,0L);