各位大侠,我新增了一个命令按钮,作用是把一个视图分割成两个视图,然后在左视图上显示对话框。可是第一次点命令按钮,视图上能正常分割,左视图对话框无法显示。如果再点一下按钮,左视图对话框又能显示。按我的经验,只有左视图宽度为0时,需要点两次按钮,而我希望点一次按钮,视图一分二后,左视图立即显示对话框。请教原因?(代码及截图如下)void MyView::OnButton14()
{
CMainFrame   *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
CRect   rc_left; //左视图
pMain->m_MySplitter.GetPane(0,0)->GetClientRect(&rc_left);int left,min;
pMain->m_MySplitter.GetColumnInfo(0, left, min);    //得到左视图的宽度
if(left==0) 
{left=rc.Width()/3;//如果左视图宽度是0,就打开左视图,宽度是屏幕的1/3。即rc是屏幕的宽度
pMain->m_MySplitter.SetColumnInfo(0,left,0);//设置左视图
pMain->m_MySplitter.RecalcLayout(); 
}CCreateContext   Context;  
pMain->m_MySplitter.DeleteView(0, 0);//删除旧视图  
pMain->m_MySplitter.CreateView(0,0,RUNTIME_CLASS(CMFC_Library_RibbonView), CSize(left,rc.Height()),&Context);//创建新视图
pMain->m_MySplitter.RecalcLayout(); 
     CHART11Dlg* CHARTDlg=new CHART11Dlg(); //新建一个对话框,准备在左视图显示
CHARTDlg->Create(IDD_CHARTOperation,pMain->m_MySplitter.GetPane(0,0));
CHARTDlg->ShowWindow(SW_SHOW);      
CHARTDlg->MoveWindow(&rc_left); pMain->m_MySplitter.SetActivePane(0,1);
}

解决方案 »

  1.   

    找到原因了,CRect   rc_left; //左视图pMain->m_MySplitter.GetPane(0,0)->GetClientRect(&rc_left);应放在 pMain->m_MySplitter.DeleteView(0,0);//删除旧视图  pMain->m_MySplitter.CreateView(0,0, RUNTIME_CLASS(CMFC_Library_RibbonView), CSize(left,rc.Height()),&Context);//创建新视图      pMain->m_MySplitter.RecalcLayout(); 后面,就这么简单,花了我5个小时。