1. 在SDI窗口中添加Splitter


(1)在stdafx.h中添加:


#include <afxcview.h>


#include <afxrich.h>



(2)在MainFrm.h中添加


protected:


m_wndSplitterLR;


m_wndSplitterLTB;



(3)在MainFrm.cpp中重载OnCreateClient


BOOL 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),                //右边一列添加视图: CFileConfigView


CSize(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),                    //左上窗格添加视图: CBrdListView


CSize(lx, lyt), pContext);


m_wndSplitterLTB.CreateView(1, 0, RUNTIME_CLASS(CBrdInfoView),                    //左下窗格添加视图: CBrdInfoView


CSize(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,最小宽度0


m_wndSplitterLTB.SetRowInfo(0, lyt, 0); //给一行设置一个“理想的”高度


m_wndSplitterLTB.SetRowInfo(1, lyb, 0); //第1行,高度yb,最小高度0


RecalcLayout();


}



(7)窗口效果

MFC单文档框架编程(一): 分隔窗口的实现_初始化