描述:
 一个dialog窗体上创建了一个Ctreectrl(Cmain)左 和一个CTabCtrl(Cdatabrowse)右

 CTabCtrl的一页上动态创建两个dialog(Cunit(sw_show),Cfac(sw_hide))(style:child);问:Ctreectrl节点单击时根据条件显示/隐藏 Cunit,cfac两个dialog窗体片断代码:
void CMainFrame::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
  {
//*****; m_databrowse.SetPageVisible();
         //**********   
  }
void Cdatabrowse::SetPageVisible()
  {
//********
  
  UnitInfroFRM.ShowWindow(FALSE);------失败
  FacInfroFRM.ShowWindow(SW_SHOW);
//****************  }

解决方案 »

  1.   

    OnInitDialog()里调用UnitInfroFRM.create试一试
      

  2.   

    跟踪好像指针所指的内容为空!
    ****unused
      

  3.   

    片断:
    BOOL Cdatabrowse::OnInitDialog()
      {
     
    UnitInfroFRM.Create(IDD_DIALOG_UNITINFRO,&m_tab_form);
        UnitInfroFRM.MoveWindow(&rc);
    UnitInfroFRM.ShowWindow(SW_SHOW);  FacInfroFRM.Create(IDD_DIALOG_FACINFRO,&m_tab_form);
        FacInfroFRM.MoveWindow(&rc);
    FacInfroFRM.ShowWindow(SW_HIDE); 
    return TRUE;
     
      }
      

  4.   

    跟踪好像指针所指的内容为空!
    ****unused-----它在那赋的值..?
    赋值成功了没..?是不是释放了,有用..?---
    自己跟下
      

  5.   

    回liuxiuk兄: SetPageVisible函数在Cdatabrowse里调用可以 可是CtreeCtrl节点单击调用的时候就报错
            MaiFrm.cpp 中 调用 Cdatabrowse 的 setpagevisible 函数
      

  6.   

    void Cdatabrowse::SetPageVisible()
      {
      
     UnitInfroFRM.m_btnsave.EnableWindow(0);  }
    这样调用也不行,初学vc++ 不明白
      

  7.   

    Debuger assertion Failed!program: pdms.exe
    line:350
    file:winocc.cppFor information on how your program can cause an assertion failer
      

  8.   

    涉及初始化代码片断:
    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
    return -1;
                  ****
                  ***     m_TabCtrl_data.AddPage(RUNTIME_CLASS(Cdatabrowse),IDD_DIALOG_DATABROWSE,"数据显示区",IDI_ICON2);
    }--------------------------
    void CMainFrame::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult)
      {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

    UpdateData(true);
               ***************** TreeNodeData *NodeData=(TreeNodeData *)m_wndTree.GetItemData(pNMTreeView->itemNew.hItem);
    m_databrowse.SetPageVisible();//此处调用Cdatabrowse的SetPageVisible()
            *******
    }
    ---------------------void Cdatabrowse::SetPageVisible()
      { /* CWnd*   pDlg;pDlg=NULL;   
      pDlg=(Cdatabrowse *)GetDlgItem(IDD_DIALOG_DATABROWSE);   
      if(pDlg!=NULL)   
      {   
            UnitInfroFRM.ShowWindow(SW_HIDE);
      } */
      UnitInfroFRM.m_btnsave.EnableWindow(0);  }
      

  9.   

    兄弟, 你是动态生成还是静态?动态的话:
    CxxDialog *pUnitInfroFRM = new CxxDialog;
    pUnitInfroFRM ->Create(IDD_XXX);你这个:
    UnitInfroFRM.Create(IDD_DIALOG_UNITINFRO,&m_tab_form);
    调用成功没有哟?还有, 你是在哪儿定义的UnitInfroFRM哟?
      

  10.   

    UnitInfroFRM.Create(IDD_DIALOG_UNITINFRO,&m_tab_form);
    在Cdatabrowse.h里定义的
    如果把函数放在Cdatabrowse.cpp里执行没有问题,可以如果用MainFrm.cpp里通过单击树节点
    时就报错。程序结构:左边m_tab_form上生成树结构
              右边m_tab_data上生成N个dialog来显示数据
    结构部分的代码都在上边了,各位帮忙啊,一个星期也没有解决了,刚学c++,高手指点一二