通过查阅资料,已经在一个Dialog里实现了TreeCtrl控件,现在需要在里面加入各item对应的页面,要求用SDK实现。问题描述和例子请见:http://www.dyc.googlepages.com/home想请教:思路是什么?如果有源码,能否提供一下?我目前的思路不知是否可行?思路如下:我在有Tree控件的Dialog里放入一个框group box,ID是“IDC_DLG_AREA”,在调用这个Dialog后,我该Dialog初始化时同时用HIDE的方式打开另两个Dialog,将MoveWindow到IDC_DLG_AREA指定的区域。在TreeCtrl里点不同的item,将相应的Dialog显示或隐藏。新手,请多多指点。如果分不够,可以再另开一个帖子,再送上100。
拜托高人了!诚心感谢!!

解决方案 »

  1.   

    将创建的对框指针放到treeview中去,使用SetItemData方法,然后去控制每个对话框的显示与隐藏.
      

  2.   

    mynamelj(夏娃的诱惑),您好!我不懂MFC,请问有没有“将创建的对框指针放到treeview中去,使用SetItemData方法,然后去控制每个对话框的显示与隐藏.”相关的例子呢?
    比如,我创建对话框:g_hDlg1 = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_TREEROOT1), 0, DlgTreeRoot1);
    g_hDlg2 = CreateDialog (hInstance, MAKEINTRESOURCE(IDD_TREEROOT2), 0, DlgTreeRoot2);之后,我如何将该指针放到treeview中并使用SetItemData方法去控制每个对话框的显示与隐藏?
    请抽空指点一下有没有可供参考的资料?
      

  3.   

    'SetItemData' : undeclared identifier
    这个函数是否只适用于CTreeCtrl,用于MFC,而不是SDK?
      

  4.   

    lz的思路是对的。TreeView每个节点都包含一个TVITEM结构,这个结构中的lParam成员就是用于存放用户自定义数据的。你可以把分页对话框的句柄放入这个成员中,可以在一开始添加节点的时候放入(发送TVM_INSERTITEM消息),也可以后来修改(发送TVM_SETITEM消息)
      

  5.   

    在TreeView切换节点的时候,父窗口会收到WM_NOTIFY消息,消息子代码 TVN_SELCHANGED 表示用户点击切换了TreeView的节点。
    case WM_NOTIFY:
      NMHDR *pNmhdr = (NMHDR *)LParam;
      if(pNmhdr->hwndFrom == hWndTreeView)
      {
        if(pNmhdr->code == TVN_SELCHANGED)
        {
          // 节点改变
        }
      }
      

  6.   

    在SDK中就是SetItemSetItem(hItem, TVIF_PARAM, NULL, 0, 0, 0, 0, (LPARAM)hDlg);我这时没有这样的例子,MFC的就有.
      

  7.   

    查MSDN,发现SetItem也不是SDK函数:error C2065: 'SetItem' : undeclared identifier回复机器人:多谢指点,经查阅资料,现已完成了页面的切换。但有个问题,麻烦机器人指点一下:TreeView,怎样才能默认就是展开的(SDK实现)?
      

  8.   

    另,机器能能否指点一下:如何保存子对话框的数据?
    我现在的方法是通过SendMessage来实现,是否还有更好的方法?另,我现在只会:
    g_hDlg1 = CreateDialog (g_hInst, MAKEINTRESOURCE(IDD_TREEROOT1), hWnd, DlgTreeRoot1);
    g_hDlg2 = CreateDialog (g_hInst, MAKEINTRESOURCE(IDD_TREEROOT2), hWnd, DlgTreeRoot2);
    ShowWindow(g_hDlg1, SW_HIDE);
    ShowWindow(g_hDlg2, SW_HIDE);
    MoveWindow(g_hDlg1, 200, 20, 200, 200, true);
    MoveWindow(g_hDlg2, 200, 20, 200, 200, true);
    这样的方法把子窗口移到指定区域,而我在父窗口里放入一个框group box,ID是“IDC_DLG_AREA”,怎样才能MoveWindow到 IDC_DLG_AREA 内?麻烦抽空指点一下。我先把帖给结了。多谢!
      

  9.   

    展开节点可以发送 TVM_EXPAND 消息,或者使用 TreeView_Expand 宏
    如:SendMessage(hWndTreeView, TVM_EXPAND, (WPARAM)TVE_EXPAND, (LPARAM)hItem);
      

  10.   

    谢谢,另一个问题解决了:
    RECT rc;
    GetWindowRect(GetDlgItem(hWnd, IDC_DLG_AREA), &rc);
    MoveWindow(g_hDlg1, rc.left, rc.top-20, rc.right-rc.left-20, rc.bottom-rc.top-40, true);
    MoveWindow(g_hDlg2, rc.left, rc.top-20, rc.right-rc.left-20, rc.bottom-rc.top-40, true);