首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

视图分割的有关问题

2012-12-14 
视图分割的问题?各位大侠,我新增了一个命令按钮,作用是把一个视图分割成两个视图,然后在左视图上显示对话

视图分割的问题?
各位大侠,我新增了一个命令按钮,作用是把一个视图分割成两个视图,然后在左视图上显示对话框。可是第一次点命令按钮,视图上能正常分割,左视图对话框无法显示。如果再点一下按钮,左视图对话框又能显示。按我的经验,只有左视图宽度为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个小时。

热点排行