我建了3个类,主对话框Dlg类、新的对话框类、TreeCtrl类,主对话框调用了 新的对话框和TreeCtrl类中的函数,现在新的对话框中放了几个按钮,实现时需要调用TreeCtrl类中的函数,如何实现???在新对话框中定义的TreeCtrl变量无法使用。
新的对话框只是在主对话框中显示:m_SelSearchDlg.Create(IDD_DIALOG_SELSEARCH, this); 

解决方案 »

  1.   

    如果主对话框为cmaindlg,里面定义ctreectrl m_ctl;
    那么,在子对话框中这样:
    cmaindlg *pdlg = GetParent();
    pdlg->m_ctl.
      

  2.   

    TreeCtrl在 主对话框中已经定义了 m_SearchTree,  新对话框在主对话框中定义了  m_SelSearch,
    现在新的对话框又要用到 TreeCtrl中的函数。
    如果不能调用TreeCtrl中的函数,能够在主对话框中放一个按钮,并置前到新的对话框上面。就是在最前面显示(新对话框显示在主对话框上面了,主对话框中的按钮要显示在最前面)
      

  3.   

    获取主对话框句柄
    GetMainWnd
      

  4.   

    主对话框已经定义了其他两个类 变量,在新对话框中定义TreeCtrl变量直接出错。
      

  5.   

    刚试了下,获取不到m_ctl变量。
    以下为我的代码:
    void CSearchDialogDlg::CreatSelSerachDlg(void)
    {
    m_SelSearchDlg/*新的对话框*/.Create(IDD_DIALOG_SELSEARCH, this);
    CreatTreeCtrl(&m_SelSearchDlg);
    }void CSearchDialogDlg::CreatTreeCtrl(CWnd *pParentWnd)
    {
    CPoint point = 0;
    SIZE size = {0}; CWnd* pWnd;
    pWnd = &m_SearchTree;
    pWnd->CreateEx(0,WC_TREEVIEW, _T(""),
    WS_VISIBLE | WS_TABSTOP | WS_CHILD |WS_POPUP
    | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES
    | TVS_DISABLEDRAGDROP | TVS_NOTOOLTIPS | TVS_CHECKBOXES,
    CRect(point,size), pParentWnd, NULL);
    m_SearchTree.m_pbuttonSearchArea = &m_buttonSearchArea;
    m_SearchTree.InitialTree();
    m_SearchTree.ShowWindow(FALSE);
    }
    如何在新的对话框中调用m_SearchTree变量。
      

  6.   

    新对话框类里增加CTreeCtrl*,在创建后赋值。
      

  7.   

    用MFC向导在你的新类里增加CTreeCtrl的成员变量,然后把CTreeCtrl改成你的TreeCtrl类,再用成员变量调用你的类里的公有成员函数。不过要包含头文件定义。