我做了一个左边是树形视图,右边是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;
}
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;
}
{
// 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是没有问题的,这个无需怀疑
你要在初始化的时候把这几个指针都赋值NULL