视图分割的问题?
各位大侠,我新增了一个命令按钮,作用是把一个视图分割成两个视图,然后在左视图上显示对话框。可是第一次点命令按钮,视图上能正常分割,左视图对话框无法显示。如果再点一下按钮,左视图对话框又能显示。按我的经验,只有左视图宽度为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);
}
[解决办法]
要处理OnSize消息
[解决办法]
找到原因了,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个小时。