我做了一个左边是树形视图,右边是FrameView视图的界面,想实现的功能是双击左边树形节点,在右边显示不同的对话框。我用的非模态对话框的显示和隐藏,现在的问题是,对话框切换以后不失去焦点,我的计划是使焦点在显示的对话框上,用SetFocus()函数不行,应该用什么方法呢?
void CLeftView::OnDblclk(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 (); // 获得右窗口指针
CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd();
CEOSimuView* pView=pMain->GetRightPane(); m_pDlg = new CParaDlg;
m_pDlg->Create(IDD_PARA,pView);
m_hDlg = new CHESimuDlg;
m_hDlg->Create(IDD_HESIMU,pView);
m_rDlg = new CRESimuDlg;
m_rDlg->Create(IDD_RESIMU,pView);
// 指定显示的对话框
CString str = GetTreeCtrl().GetItemText(select_item);
if(str == "工艺参数查询")
{
        m_rDlg->ShowWindow(SW_HIDE);
        m_hDlg->ShowWindow(SW_HIDE);
m_pDlg->ShowWindow(SW_SHOW);
}
if(str == "换热系统模拟")
{
m_pDlg->ShowWindow(SW_HIDE);
        m_rDlg->ShowWindow(SW_HIDE);
m_hDlg->ShowWindow(SW_SHOW);
}
if(str == "反应系统模拟")
{
m_pDlg->ShowWindow(SW_HIDE);
        m_hDlg->ShowWindow(SW_HIDE);
m_rDlg->ShowWindow(SW_SHOW);
}
*pResult = 0;
}

解决方案 »

  1.   

    void CLeftView::OnDblclk(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 ();// 获得右窗口指针
    CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd();
    CEOSimuView* pView=pMain->GetRightPane();//不可在每次双击是创建一个对话框
    if(m_pDlg || m_hDlg || m_rDlg)
    {
         m_pDlg = new CParaDlg;
         m_pDlg->Create(IDD_PARA,pView);
         m_hDlg = new CHESimuDlg;
         m_hDlg->Create(IDD_HESIMU,pView);
         m_rDlg = new CRESimuDlg;
         m_rDlg->Create(IDD_RESIMU,pView);
    }// 指定显示的对话框
    CString str = GetTreeCtrl().GetItemText(select_item);
    if(str == "工艺参数查询")
    {
      m_rDlg->ShowWindow(SW_HIDE);
      m_hDlg->ShowWindow(SW_HIDE);
    m_pDlg->ShowWindow(SW_SHOW);
    }
    if(str == "换热系统模拟")
    {
    m_pDlg->ShowWindow(SW_HIDE);
      m_rDlg->ShowWindow(SW_HIDE);
    m_hDlg->ShowWindow(SW_SHOW);
    }
    if(str == "反应系统模拟")
    {
    m_pDlg->ShowWindow(SW_HIDE);
      m_hDlg->ShowWindow(SW_HIDE);
    m_rDlg->ShowWindow(SW_SHOW);
    }
    *pResult = 0;
    }另外SetFocus是没有问题的,这个无需怀疑
      

  2.   

    还是不行,加了 if(m_pDlg || m_hDlg || m_rDlg)以后不能创建对话框了
      

  3.   


    你要在初始化的时候把这几个指针都赋值NULL