对单文档窗口进行分割为一个CView类型的视图区和CFormView类型的对话框,在CFormView中创建TabCtrl控件,该控件中有多个CDialog类型的对话框。需要分割窗口成功,就需要把CFormView对话框属性改为Child,但是这样的话TabCtrl中的对话框均不能响应按钮和文本框操作(http://www.xuebuyuan.com/731458.html),怎么修改才能符合要求?有的分都压上了,望见谅,望大神给予指导。
分割窗口:
[code=c]
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
CRect client_rect;
GetClientRect(&client_rect);
m_wndSplitter.CreateStatic(this,1,2);//创建静态分隔符将视图一分为二
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CProcess), CSize(400, 0), pContext); //CParentDialog是父对话框类
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CDocTestView), CSize(client_rect.Width() - 400, 0), pContext); //CImageViewView是视图类
SetActiveView((CDocTestView*)m_wndSplitter.GetPane(0,0)); //指定类视图
return TRUE;
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}
[/code]
添加页面:
[code=c]
void CProcess::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
// 添加Tab页
//m_tab.ModifyStyle(DS_CONTROL, 0);
//m_tab.ModifyStyleEx(0, WS_EX_CONTROLPARENT);
m_tab.InsertItem(0, "加工");
m_tab.InsertItem(1, "绘图");
m_page1.Create(IDD_DIALOG2, GetDlgItem(IDD_PROCESS));
m_page2.Create(IDD_DIALOG1, GetDlgItem(IDD_PROCESS));
//调整位置
CRect rect;
m_tab.GetWindowRect(&rect);
/*this->GetWindowRect(&rect);
m_tabCtrl.GetClientRect(&rect);
this->GetClientRect(&rect);
this->GetParent()->GetClientRect(&rect);*/
rect.top -= 2;
rect.bottom -= 25;
rect.left += 1;
rect.right -= 4;
m_page1.MoveWindow(&rect);
m_page2.MoveWindow(&rect);
m_page1.ShowWindow(FALSE);
m_page2.ShowWindow(TRUE);
m_tab.SetCurSel(2);
}
[/code]
界面如图:
这个问题比较冷门。
应该是蛮老的问题了!目前是用CPropertySheet+CPropertyPage来解决的,中间也遇到一些纠结的Unicode导致界面只能使用老版本的样式,不然背景就直接变白色(不过可以通过绘制背景来恢复默认颜色),折腾的差不多了,但还是希望上面的问题的到比较好的解释或者解决办法。谢谢你的回复