MFC基于单文档分割窗口
2017-06-06 09:35
323 查看
创建一个MFC单文档应用程序命名为test
打开资源管理器Dialog,右击鼠标,插入两个对话框选择基于CFormView类
属性style改为child,broad改为none
在对话框中插入类,分别命名为cDialogData,cDialogA.
打开类视图,右击CMainFrm类,选择属性,重写OnCreateClient函数。
在MainFrm.h中加入CSplit
a150
terWnd m_wndSplitter;
CSplitterWnd m_wndSplitter2;的定义
在MainFrm.cpp中加入头文件DialogData.h和DialogA.h
在OnCreateClient函数中添加以下代码
就分好了,但是为什么不加入
这些设置窗口大小的函数时总是报错,而且运行不出来view区域。
这样运行出来的效果如
图所示。
如果想要设置每个窗口的大小随意变动,则要BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//CRect rc;
//// 获取框架窗口客户区的CRect 对象
//GetClientRect(&rc);
// 创建静态分割窗口,一行两列
if(!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
//窗口的再分割
if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 0))==NULL)
return FALSE; //将第0行0列再分开2行1列
if(m_wndSplitter3.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 1))==NULL)
return FALSE; //将第0行0列再分开2行1列
// 创建右下面窗格中的视图
if(!m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(CDialogStatus),CSize(200,200), pContext))
return FALSE;
// 创建右上面窗格中的视图
if(!m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext))
return FALSE;
// 创建左下面窗格中的视图
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext))
return FALSE;
if(!m_wndSplitter2.CreateView(1,0, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext))
return FALSE;
//CRect r;
//GetClientRect(&r);
m_wndSplitter.SetColumnInfo(0,800, 100);
m_wndSplitter2.SetRowInfo(0, 400, 100);
m_wndSplitter3.SetRowInfo(0, 200, 100);
m_wndSplitter.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();
return TRUE;
}
运行出来就如第二张图所示了。
设置的思路图在最后一张图上。
打开资源管理器Dialog,右击鼠标,插入两个对话框选择基于CFormView类
属性style改为child,broad改为none
在对话框中插入类,分别命名为cDialogData,cDialogA.
打开类视图,右击CMainFrm类,选择属性,重写OnCreateClient函数。
在MainFrm.h中加入CSplit
a150
terWnd m_wndSplitter;
CSplitterWnd m_wndSplitter2;的定义
在MainFrm.cpp中加入头文件DialogData.h和DialogA.h
在OnCreateClient函数中添加以下代码
// 创建静态分割窗口,一行两列 if(!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; //再把左边窗口分为两行一列 if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD, m_wndSplitter.IdFromRowCol(0, 0))==NULL) return FALSE; //将第0行0列再分开2行1列 // 创建右面窗格中的视图 if(!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDialogA),CSize(200,1000), pContext)) return FALSE; // 创建左上面窗格中的视图 if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext)) return FALSE; // 创建左下面窗格中的视图 if(!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext)) return FALSE; /* if(!m_wndSplitter.CreateView(1, 1, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext)) return FALSE;*/
CRect r; GetClientRect(&r); m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 0 ); //m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 1 ); m_wndSplitter.RecalcLayout(); m_wndSplitter2.SetRowInfo(0,r.Height()/2,0); m_wndSplitter2.SetRowInfo(1,r.Height()/2,0); m_wndSplitter2.RecalcLayout();
就分好了,但是为什么不加入
CRect r; GetClientRect(&r); m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 0 ); //m_wndSplitter.SetColumnInfo( 0, r.Width()/3, 1 ); m_wndSplitter.RecalcLayout(); m_wndSplitter2.SetRowInfo(0,r.Height()/2,0); m_wndSplitter2.SetRowInfo(1,r.Height()/2,0); m_wndSplitter2.RecalcLayout();
这些设置窗口大小的函数时总是报错,而且运行不出来view区域。
这样运行出来的效果如
图所示。
如果想要设置每个窗口的大小随意变动,则要BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
//CRect rc;
//// 获取框架窗口客户区的CRect 对象
//GetClientRect(&rc);
// 创建静态分割窗口,一行两列
if(!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
//窗口的再分割
if(m_wndSplitter2.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 0))==NULL)
return FALSE; //将第0行0列再分开2行1列
if(m_wndSplitter3.CreateStatic(&m_wndSplitter,2,1,WS_VISIBLE|WS_CHILD,
m_wndSplitter.IdFromRowCol(0, 1))==NULL)
return FALSE; //将第0行0列再分开2行1列
// 创建右下面窗格中的视图
if(!m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(CDialogStatus),CSize(200,200), pContext))
return FALSE;
// 创建右上面窗格中的视图
if(!m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(CyyyView),CSize(800, 800), pContext))
return FALSE;
// 创建左下面窗格中的视图
if(!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(cDialogData),CSize(800, 200), pContext))
return FALSE;
if(!m_wndSplitter2.CreateView(1,0, RUNTIME_CLASS(CDialogA),CSize(200, 800), pContext))
return FALSE;
//CRect r;
//GetClientRect(&r);
m_wndSplitter.SetColumnInfo(0,800, 100);
m_wndSplitter2.SetRowInfo(0, 400, 100);
m_wndSplitter3.SetRowInfo(0, 200, 100);
m_wndSplitter.RecalcLayout();
m_wndSplitter2.RecalcLayout();
m_wndSplitter3.RecalcLayout();
return TRUE;
}
运行出来就如第二张图所示了。
设置的思路图在最后一张图上。
相关文章推荐
- MFC基于单文档分割视图后子窗口点击编辑框获得相应的操作
- 基于MFC窗口分割与通信
- mfc 基于formview的sdi 打开文档后 窗口变小的问题
- 基于MFC单文档下调用opencv库并将图片效果显示在单文档窗口
- VS2013/MFC编程入门之三十八(文档、视图和框架:分割窗口)
- VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
- VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
- VS2013/MFC编程入门之三十八(文档、视图和框架:分割窗口)
- MFC对单文档进行窗口分割。
- 基于对话框的MFC项目实现窗口分割
- vc6.0 MFC 单文档 静态分割窗口
- MFC单文档-窗口分割
- MFC单文档的窗口分割
- (转载)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
- CSplitterWnd类分割MFC单文档应用程序窗口
- vc6.0 MFC 单文档 静态分割窗口
- vc6.0 MFC 单文档 静态分割窗口
- vc6.0 MFC 单文档 静态分割窗口
- MFC,基于单文档的构架,初始化时隐藏主窗口发生闪烁如何解决
- MFC单文档分割窗口