vs:vs2010
工程:mfc-多文档-office-office2007
1、新建类CSendListView继承CListView
添加虚函数OnInitialUpdate
#if 1
//在第一个视图添加到文档之后调用
void CSendListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl& list = GetListCtrl();
LONG lStyle;
lStyle &= ~LVS_TYPEMASK;
lStyle |= LVS_REPORT;
//这里修改窗口风格为什么失败,TODO
//SetWindowLong(list.m_hWnd, GWL_STYLE, lStyle);
CBitmap bmp;
bmp.LoadBitmap(IDB_INFO);
m_imageList.Create(16,16,ILC_COLOR24 | ILC_MASK, 6,0);
m_imageList.Add(&bmp,RGB(255,0,255));
list.SetImageList(&m_imageList,LVSIL_SMALL);
list.ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SORTASCENDING);
list.SetExtendedStyle(list.GetExtendedStyle()|LVS_EX_GRIDLINES|
LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_REPORT);
list.InsertColumn(0,_T("第一列"), LVCFMT_CENTER,70);
list.InsertColumn(1,_T("第二列"), LVCFMT_CENTER,70);
}
#endif
#if 0
void CSendListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl& list = GetListCtrl();
//没有修改ModifyStyle不能添加列到界面
list.ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SORTASCENDING);
list.SetExtendedStyle(list.GetExtendedStyle()|LVS_EX_GRIDLINES|
LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_REPORT);
list.InsertColumn(0,_T("第一列"), LVCFMT_CENTER,70);
list.InsertColumn(1,_T("第二列"), LVCFMT_CENTER,70);
}
#endif
2、新建类CSendPreView继承CRichEditView
3、新建对话框CFormView,并绑定类CSonFormView继承CFormView
4、在CChildFrame类中添加虚函数OnCreateClient
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rc;
// 获取框架窗口客户区的CRect对象
GetClientRect(&rc);
// 创建静态分割窗口,两行一列
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 2, 1))
return false;
//m_wndSplitter.IdFromRowCol(0,0);
int l = rc.Width()/2;
int w = rc.Height()/2;
// 创建上面窗格中的视图
if (!m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CSendListView), CSize(rc.Width()/2, rc.Height()/2), pContext))
return FALSE;
if (!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CSendPreView), CSize(rc.Width()/2, rc.Height()/2), pContext))
return FALSE;
//为什么CSonFormView 就iquan给覆盖了
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSonFormView), CSize(rc.Width()/2, rc.Height()), pContext))
return FALSE;
return true;
}
5、上一步骤添加,不正常显示3个view,再添加OnPaint虚函数
void CChildFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CMDIChildWndEx::OnPaint()
CRect rc;
// 获取框架窗口客户区的CRect对象
GetClientRect(&rc);
m_wndSplitter.SetColumnInfo(0,rc.Width()/2,rc.Width()/2);//调整他的宽度
m_wndSplitter.RecalcLayout();
m_wndSplitter2.SetRowInfo(0, rc.Height()/2, rc.Height()/2);//调整他人高度
m_wndSplitter2.RecalcLayout();
}
注意:这样每新建一个文档就会出现3个view,若想自己去控制实现类似点击某个按钮就创建文档,可以自己去创建类继承CMDIChildWndEx,并在工程名.cpp的工程App中的
方法InitInstance中
m_pBCTemplate = new CMultiDocTemplate(IDR_splitterView1TYPE,
RUNTIME_CLASS(CsplitterView1Doc),//
RUNTIME_CLASS(CChildFrame), // 这里要换成继承CMDIChildWndEx的类
RUNTIME_CLASS(CView));
m_pBCTemplate->OpenDocumentFile(NULL);//合适的位置调用这里创建文档