mfc 多文档 静态视图分拆

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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MFC文档视图的创建可以分为以下几个步骤: 1. 创建一个多文档应用程序 在Visual Studio中创建一个MFC应用程序时,选择“多文档应用程序”模板,这样就会自动生成一些基本的代码和文件结构。 2. 添加新的文档类型 在多文档应用程序中,可以有多种不同的文档类型,每种文档类型可以有自己的视图类型。例如,在一个画图程序中,可以有一个文档类型用于绘制直线,另一个文档类型用于绘制圆形。 要添加新的文档类型,可以在“资源视图”中右键单击“DocTypes”节点,选择“添加新项”,然后在“添加新文档类型向导”中按照提示操作即可。 3. 添加新的视图类型 每个文档类型可以有多个不同的视图类型,例如,在一个画图程序中,可以有一个视图用于显示直线,另一个视图用于显示圆形。 要添加新的视图类型,可以在“资源视图”中右键单击相应的文档类型节点,选择“添加新项”,然后在“添加新视图向导”中按照提示操作即可。 4. 在文档类中实现创建视图的函数 在文档类中,需要实现一个函数,用于创建该文档类型的视图。这个函数的返回值应该是CView或其派生类的指针。例如: CView* CMyDoc::CreateView(CWnd* pParentWnd) { CView* pView = new CMyView; pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), pParentWnd, AFX_IDW_PANE_FIRST, NULL); return pView; } 在这个函数中,先创建一个新的视图对象,然后调用其Create函数创建实际的窗口,并返回指向该视图对象的指针。 5. 在主框架窗口类中添加菜单项和工具栏按钮 为了让用户能够创建新的文档和打开已有文档,需要在主框架窗口类中添加相应的菜单项和工具栏按钮。 6. 运行程序,测试多文档视图功能 完成上述步骤后,就可以运行程序,测试多文档视图的功能了。可以尝试创建多个不同类型的文档,并在每个文档中创建不同类型的视图,然后在不同的视图中进行操作,观察程序的行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

woquNOKIA

谢谢老板!

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

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

打赏作者

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

抵扣说明:

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

余额充值