mfc 多文档 静态视图分拆

来源:互联网 发布:上海软件测试工资水平 编辑:程序博客网 时间:2024/05/21 15:45

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);//合适的位置调用这里创建文档

0 0
原创粉丝点击