b2c信息网

您现在的位置是:首页 > 热点事件 > 正文

热点事件

mfc单文档多视图源码(mfc多文档教程)

hacker2022-06-10 18:27:31热点事件81
本文目录一览:1、如何在mfc单文档中创建多视图

本文目录一览:

如何在mfc单文档中创建多视图

基本步骤如下:

1.首先创建一个MFC单文档应用程序。

2.添加4个MFC类TopLView、BottomLView、TopRView、BottomRView,基类为CView。

3.添加一个MFC类CControlForm,基类为CFormView,对话框ID默认。

4.创建一个切分类,如MySplitter,基类为CSplitterWnd(默认基类选项中无此类,自己添加即可)。

5.在框架类Cmainframe的头文件中,添加2个MySplitter的变量(因为下面要进行两次切分操作)。

6.重写框架类Cmainframe的OnCreateClient函数,如下:

//第一次静态切分CreateStatic,一行两列

if (!m_wndSplitter.CreateStatic(this,1,2))

return FALSE;

//第二次静态切分(将第一次切分后的第二列再分为2*2)及所有的子视图创建(CreateView函数)。

if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CControlForm), CSize(100, 100), pContext) ||

!m_wndSplitter2.CreateStatic(m_wndSplitter,2,2,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1))|| !m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(TopLView), CSize(350, 240), pContext) ||

!m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(BottomLView), CSize(350, 240), pContext) ||

!m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(TopRView), CSize(350, 240), pContext) ||

!m_wndSplitter2.CreateView(1, 1, RUNTIME_CLASS(BottomRView), CSize(350, 240), pContext))

{

m_wndSplitter.DestroyWindow();

return FALSE;

}

// return CFrameWnd::OnCreateClient(lpcs, pContext); //注释掉原有的响应函数

注意:记得在Mainfrm.h中添加以上五个视图类的头文件:

#include "CControlForm.h"

#include "TopLView.h"

#include "TopRView.h"

#include "BottomLView.h"

#include "BottomRView.h"

6. 切分视图完成,结果如下:

其中,最左的视图为FormView类型,操作类似对话框(可以在Resource-Dialog看到其对应的对话框资源);右边四个的操作则类似普通视图。

补充内容:

a. 此时创建的各个子视图之间的分割条可以拖动,以改变视图其大小。如果想固定分割条,则需要重载MySplitter类的鼠标响应函数。可以通过一个Bool型变量来控制是否可以拖动分割条:

if (Isvisable) //Isvisable在构造函数中已被初始为FALSE

{

CSplitterWnd::OnLButtonDown(nFlags, point);

}

b. 还可以通过重载MySplitter类的OnDrawSplitter函数来改变分割条的样式。以下为该函数代码:

#define LP RGB(128,128,128)

#define RB RGB(192,192,192)

//如果pDC 为 NULL则仅使分割窗口区域无效

if (pDC == NULL)

{

RedrawWindow(rect, NULL, RDW_INVALIDATE|RDW_NOCHILDREN);

return;

}

ASSERT_VALID(pDC);

CRect rc = rect;

switch(nType)

{

case splitBorder:

//重画分割窗口边界

pDC-Draw3dRect(rc,LP,LP);

rc.InflateRect(-1,-1);

pDC-Draw3dRect(rc,RB,RB);

return;

case splitBox:

pDC-Draw3dRect(rc,LP,LP);

rc.InflateRect(-1,-1);

pDC-Draw3dRect(rc,LP,LP);

rc.InflateRect(-1,-1);

pDC-FillSolidRect(rc,RGB(128,128,128));

pDC-Draw3dRect(rc,RB,RB);

return;

case splitBar:

//重画分割条

pDC-FillSolidRect(rc,RGB(192,192,192));

rc.InflateRect(-1,-1);

pDC-Draw3dRect(rc,RB,RB);

return;

default:

ASSERT(FALSE);

}

//填充中间的部分

pDC-Draw3dRect(rect, GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT));

MFC单文档多视图问题

用GetDocument()-UpdateAllViews(this,)通知绑定到同一文档的其他视图

在框架里用CSplitterWnd切分窗口

单文档多视图MFC

你设置断点跟踪下看 看定时器是否设置了 然后看定时器的响应函数是否执行了, 还有你的OnDraw是否执行了 我记得重绘应该写在OnPaint里的

VS MFC单文档多视图页面布局问题

左边和下边的窗口,是DockPane,MFC框架生成的代码里面有例子,如何为其创建的子窗口,比如左边的是CViewTree窗口。你看看创建代码。

你新建CFormView类,模仿1说的代码就行了。

你右边的视图直接就可以使用CFormView

至于浮动,你得看CMainFrame中的创建这些DockPane还有菜单栏的代码,查一查CMainFrame类的那几个成员函数,修改参数就可以了。最好是查msdn

MFC单文档多视图 如何添加默认视图

你把附近代码都贴上看看,我这多添2 view没什么错啊,后添的和默认的都没事啊

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,

    CCreateContext* pContext)

{

    m_wndSplitter.CreateStatic(this,1,3);

    m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMFC10SDIView),CSize(100,0),pContext);

    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(200,0),pContext);

    m_wndSplitter.CreateView(0,2,RUNTIME_CLASS(CView1),CSize(0,0),pContext);

    return true;

    //return m_wndSplitter.Create(this,

    //    2, 2,               // TODO: 调整行数和列数

    //    CSize(10, 10),      // TODO: 调整最小窗格大小

    //    pContext);

}

是不是你哪里打错了,直接建支持分割窗口的工程能少打些

vs2008里mfc工程的单文档建好后就有很多文件,这些文件都是什么意思?

stdafx.h预编译头文件,.h应用程序主头文件,doc.h文档类头文件,view.h视图类头文件,mainfrm.h主框架头文件,resource.h资源文件,cpp与之对应的源文件。

stdafx.h程序最先编译,mainfrm生成主框架即显示的单文档窗体,doc文档类执行打开保存另存为等文档操作,view视图类进行客户区的显示操作,资源文件存储资源ID。

根据MFC教程逐步学下去就会细致了解到每个文件的功能。

发表评论

评论列表

  • 听弧戈亓(2022-06-10 18:49:46)回复取消回复

    teView(1, 0, RUNTIME_CLASS(BottomLView), CSize(350, 240), pContext) || !m_wndSplitter2.CreateV

  • 只影倾酏(2022-06-10 19:36:21)回复取消回复

    CreateClient(lpcs, pContext); //注释掉原有的响应函数注意:记得在Mainfrm.h中添加以上五个视图类的头文件:#include

  • 冢渊惑心(2022-06-11 03:35:57)回复取消回复

    (0, 1, RUNTIME_CLASS(TopRView), CSize(350, 240), pContext) || !m_wndSplitter2.CreateView(1, 1, RUNTIME_CLASS(BottomRView), CSize(350, 24

  • 柔侣长野(2022-06-11 06:18:34)回复取消回复

    量(因为下面要进行两次切分操作)。6.重写框架类Cmainframe的OnCreateClient函数,如下://第一次静态切分CreateStatic,一行两列if (!m_wndS

  • 忿咬同尘(2022-06-11 01:15:49)回复取消回复

    eClient函数,如下://第一次静态切分CreateStatic,一行两列if (!m_wndSplitter.CreateStatic(this,1,2))