MFC单文档框架编程(一): 分隔窗口的实现
2015-01-27 08:45
501 查看
1. 在SDI窗口中添加Splitter(1)在stdafx.h中添加:#include <afxcview.h>#include <afxrich.h> (2)在MainFrm.h中添加protected:CSplitterWnd m_wndSplitterLR;CSplitterWnd m_wndSplitterLTB; (3)在MainFrm.cpp中重载OnCreateClientBOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext){// TODO: 在此添加专用代码和/或调用基类//return CFrameWnd::OnCreateClient(lpcs, pContext);CRect rect;GetClientRect(&rect);int x = rect.Width();int y = rect.Height();int rx = rect.Width()/3;int lx = x - rx;int lyb = rect.Height()/3;int lyt = y - lyb;int ry = rect.Height()/2; m_wndSplitterLR.CreateStatic(this, 1, 2, WS_CHILD|WS_VISIBLE|WS_BORDER); //分隔为左右两列m_wndSplitterLR.CreateView(0, 1, RUNTIME_CLASS(CFileConfigView), //右边一列添加视图: CFileConfigViewCSize(rx, ry), pContext); m_wndSplitterLTB.CreateStatic(&m_wndSplitterLR, 2, 1, //把左边一列分隔为上下两行WS_CHILD|WS_VISIBLE, m_wndSplitterLR.IdFromRowCol(0, 0));m_wndSplitterLTB.CreateView(0, 0, RUNTIME_CLASS(CBrdListView), //左上窗格添加视图: CBrdListViewCSize(lx, lyt), pContext);m_wndSplitterLTB.CreateView(1, 0, RUNTIME_CLASS(CBrdInfoView), //左下窗格添加视图: CBrdInfoViewCSize(lx, lyb), pContext);return TRUE;} (4) 在类视图中添加类CBrdListView,父类为CListView重载OnInitialUpdate函数,以初始化视图类CBrdListView。在本例中只初始化列表头void CBrdListView::OnInitialUpdate(){CListView::OnInitialUpdate(); // TODO: 在此添加专用代码和/或调用基类//添加列表的标头const int columNumber = 7;CString m_ColumnLabelStr[] = {_T("状态"),_T("设备名称"), _T("MAC"), _T("IP"), _T("固件版本"), _T("所在位置"), _T("设备型号")};CListCtrl& listCtrl = GetListCtrl();//获取列表控件DWORD dwStyle = listCtrl.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;dwStyle |= LVS_EX_GRIDLINES;dwStyle |= LVS_EX_UNDERLINEHOT;listCtrl.SetExtendedStyle(dwStyle); CRect rect;GetClientRect(rect); for(int i = 0; i < columNumber; i++){listCtrl.InsertColumn(i, m_ColumnLabelStr[i], LVCFMT_LEFT, rect.Width()/8);}} (5) CFileConfigView是一个窗体视图创建一个窗口,为窗口添加类:CFileConfigView,其父类为CFormView。 (6) CBrdInfoView的父类为CEditView,创建方法同CBrdListView (7) 窗口拖动,重载CMainFrm的OnSize函数,重新设置分隔条比例void CMainFrame::setSplitLayout() //OnSize调用该私有函数{CRect rect;GetClientRect(&rect);int x = rect.Width();int y = rect.Height();int rx = rect.Width()/3;int lx = x - rx;int lyb = rect.Height()/3;int lyt = y - lyb;int ry = rect.Height()/2; m_wndSplitterLR.SetColumnInfo(0, lx, 0); //给一列设置一个“理想的”宽度m_wndSplitterLR.SetColumnInfo(1, rx, 0); //第1列,宽度xr,最小宽度0m_wndSplitterLTB.SetRowInfo(0, lyt, 0);//给一行设置一个“理想的”高度m_wndSplitterLTB.SetRowInfo(1, lyb, 0);//第1行,高度yb,最小高度0RecalcLayout();} (7)窗口效果
相关文章推荐
- MFC单文档框架编程(一): 分隔窗口的实现
- 通过按钮控件实现MDI新建子窗口(MFC自动生成的视图、文档、子框架共用)
- VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
- VS2013/MFC编程入门之三十八(文档、视图和框架:分割窗口)
- (转载)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
- VS2013/MFC编程入门之三十八(文档、视图和框架:分割窗口)
- VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)
- 详解MFC框架窗口、文档和视图
- MFC单文档框架编程(二): SDI框架下的消息处理
- 在MFC单文档对话框实现窗口分拆
- VS2010/MFC编程入门之一(利用MFC向导生成单文档应用程序框架)
- MFC单文档框架编程(二): SDI框架下的消息处理
- VS2010/MFC编程入门之一(利用MFC向导生成单文档应用程序框架)
- MFC单文档窗口分隔
- MFC 文档 视图 框架窗口间的关系 和消息传送规律
- MFC文档、视图、框架窗口、文档模板之间的相互关系
- VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)
- MFC 文档 视图 框架窗口间的关系 和消息传送规律
- VTK与MFC联合编程实现的单文档实例vtkSDI详解
- VC 2010 + MFC + MDI多文档视图框架:视图框架窗口激活的消息通知