mfc 多文档 静态视图分拆

本文介绍如何使用MFC框架创建一个多文档界面应用程序,并详细解释了如何通过自定义视图类来实现特定的功能布局,包括调整ListView样式、插入列、设置图片列表等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woquNOKIA

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值