最近用到VC++的SDI视图编程,要做一个类似于Windows资源管理器形式的视图,左边LeftView继承了CTreeView,要做一个树形视图控件;右边继承CFrameView,有几个对话框,要求在点击左边树形控件的相关节点时,右边显示相应的对话框。遇到几个问题:
  (1)怎么将节点获得的相应对话框显示在右边窗口中?
  (2)怎样动态获得对话框?
   我是个VC++新手,从前基本上没接触过MFC,谁能提供个源码啊?先谢了!我采用的鼠标左键单击获得消息,对话框总是显示在外边,主要是不知道右边应该是个什么地址,这是代码:
void CLeftView::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
NM_TREEVIEW* pNMTreeView=(NM_TREEVIEW*)pNMHDR;
CTreeCtrl& CtlTree=(CTreeCtrl&)GetTreeCtrl ();
HTREEITEM select_item=CtlTree.GetSelectedItem ();
CString str=CtlTree.GetItemText (select_item);if(str="工艺参数管理")
{
  m_pDlg = new CParaDlg;
  m_pDlg->Create(IDD_PARA);
  m_pDlg->ShowWindow(SW_SHOW);}else if(str="换热系统模拟")
{
  m_hDlg = new CHESimuDlg;
  m_hDlg->Create(IDD_HESIMU);
  m_hDlg->ShowWindow(SW_SHOW);}
  
else if(str="反应系统模拟")
{
  m_rDlg = new CRESimuDlg;
  m_rDlg->Create(IDD_RESIMU);
  m_rDlg->ShowWindow(SW_SHOW);
}
*pResult = 0;
}

解决方案 »

  1.   

    先全部创建出来,然后根据str控制ShowWindow(SW_HIDE)或者ShowWindow(SW_SHOW);
      

  2.   

    对话框的父窗口要指定为右边窗口
    m_pDlg->Create(IDD_, 右边窗口指针);
      

  3.   

    补充:
    // CMainFrame message handlers
    CHMI_manView* CMainFrame::GetRightPane()
    {
    CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
    CHMI_manView* pView = DYNAMIC_DOWNCAST(CHMI_manView, pWnd);
    return pView;
    }
    ////
    CLeftView* CMainFrame::GetLeftPane()
    {
    CWnd* pWnd = m_wndSplitter.GetPane(0, 0);
    CLeftView* pView = DYNAMIC_DOWNCAST(CLeftView,pWnd);
    return pView;
    }