关于MFC视图文档框架的理解-1】的更多相关文章

一.单个文档和多个文档的区别: MFC分为对话框程序,单文档程序和多文档程序. 单个文档程序:一个主框架内仅允许打开一个视图,若要打开另一个,则当前的文档必须得关闭.单文档程序可以打开不同格式的文档. 对于单文档程序,主框架(CFrameWnd).视图(CView).文档(CDocument)被文档模板CSingleDocTemplate粘合在一起. 多个文档程序:一个主框架内可以打开多个视图. 对于多文档程序,主框架(CMDIFrameWnd)是单独存在的,子框架(CMDIChildWnd).…
原文转自 https://blog.csdn.net/u011619422/article/details/40402705 首先来分析一下MFC单文档类的结构: 它包括如下几个类: CAboutDlg :  对话框框类,对应应用程序的“帮助”->“关于”菜单,弹出“关于”对话框. CxxxApp: 派生自CWinApp , 为应用程序对象,负责应用程序的初始化和退出的清理工作. CMainFrame:  派生自CFrameWnd类, 为框架窗口对象,对应应用程序的主窗口. CxxxView:…
转自http://blog.csdn.net/yanfeiouc2009/archive/2010/06/07/5653360.aspx 手头上有个东西要用到单文档,由于想省事,直接用VS2010做了.刚生成的代码直接编译后会有Output.Property.Workspace和我们主程序的CxxView窗口.并且在WorkSpace窗口中添加了了树控件,在Workspace窗口中预添加了两个属性页(类视图和文件视图).感觉ms做的比较周到,但我不需要这么多窗口,只好把某些窗口注释掉. 1.去掉…
一.如何创建文档视图界面: 创建新的文档视图界面,只需要调用CDocTemplate::OpenDocumentFile(strpath)即可.(strpath为要打开的文档路径,如果是NULL,则生成新的文档). 二.上面这个函数为何能够生成文档视图对象? 因为 1.它调用了CDocTemplate::CreateNewDocument()函数生成了CDocument对象: 2.它调用了CDocTemplate::CreateNewFrame()函数生成了CFrameWnd对象: 3.在生成文…
MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在的全局变量,它属于CstockAppApp类,而CstockAppApp 继承于CwinApp类,我们看一下MSDN中CwinApp的继承关系如下: 图(二) 从继承关系当中,我们发现theApp是作为程序的实体而存在的,是单文档程序的核心. 首先分析一下的是CsockAppApp这个类,这里面有一…
MFC单文档程序架构解析 MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在的全局变量,它属于CstockAppApp类,而CstockAppApp 继承于CwinApp类,我们看一下MSDN中CwinApp的继承关系如下: 图(二) 从继承关系当中,我们发现theApp是作为程序的实体而存在的,是单文档程序的核心. 首先分析一下的是CsockAp…
一.创建并运行MFC单文档程序 1.创建单文档程序 这里使用的是VS2017.首先,打开VS2017,选择文件->新建->项目,然后选择Visual C++ -> MFC /ATL>MFC应用程序 ,如下图所示: 修改名称(或默认),修改位置(或默认),点击确定.然后接下来可以看到如下界面: 应用程序类型选择“单个文档”,其他设置默认,然后点击完成即可创建成功. 2.运行单文档程序 点击"本地Windows调试器"或者使用Ctrl+F5即可运行,得到视图窗口,如…
MFC单文档程序结构三方面: Doc MainFrame View…
1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenGL程序中的0x00000000 处未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突 void createVBO(GLuint *vbo,int size) { glGenBuffers(,vbo);//该行代码出错,呜呜 glBindBuffer(GL_ARRAY_B…
当我们使用MFC多文档创建项目时,我们可停靠窗格关闭之后就无法显示了.即使重新编译项目也无法再次显示它们. 原因:因为MFC多文档把这些设置存储在注册表 “HKEY_CURRENT_USER \ SOFTWARE \本地应用程序向导生成的应用程序\ 项目名称 ” 中,所以我们可以通过删除项目名称所在的注册表来重置设置.…
刚学MFC的我们,肯定会从一个基本MFC程序开始. 而VC++6.0的MFC基础类提供了三种创建方式:单文档.多文档.对话框. 当我们创建多文档应用程序的时候,会自动启动一个子窗口. 在我们平时使用软件的时候,比如打开Photoshop之类的,会发现并没有子窗口出现.而MFC多文档默认打开一个子窗口显得多余,那么我们怎么关闭它呢? 按照基础向导创建一个MFC多文档应用程序,这里就不做解释. 然后通过向导条,选中我们的应用程序,选中InitInstance.这个方法是对我们的类进行初始化. 这个时…
在视图应用程序中,应用程序的数据由文档对象代表,数据的视图由视图对象代表.MFC的Cdocument类是文档对象的基类,Cview类是视图对象的基类.应用程序的主窗口,其操作功能在MFC的CframeWnd和CMDIFrameWnd类中实现,已经不再以消息处理为工作焦点了,主要用作视图.工具栏以及其他用户界面对象的容器. 单文档界面应用程序只支持打开一个文档. 1.  文档.视图基础知识.   图1展示了SDI文档.视图应用程序的示意图.框架窗口是应用程序的顶层窗口,通常带有WS_OVERLAP…
MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用.单文档应用(SDI)和多文档应用(MDI).   一般情况下,采用文档/视结构的应用程序至少应由以下对象组成:       1.应用程序是一个CwinApp派生对象,它充当全部应用程序的容器.应用程序沿消息映射网络分配消息给它的所有子程序.       2.框架窗口是一CfrmeWnd派生对象.       3.文档是一个CDocument派生对象,它存储应用程序的数据,并把这些信息提供给应用程序的其余部分.       4…
1. 创建不同的子frame. 在文档视图程序中 CMainFrame(class CMainFrame : public CMDIFrameWndEx) 继承自 CMDIFrameWnd (CMDIFrameWndEx 为 CMDIFrameWnd子类). 因此可以将 m_pMainWnd 转为 CMDIFrameWnd 的指针, 再调用 CreateNewChild 创建一个子frame. 此时可根据传入的具体的类名, 强制转换为所需的对象. CMDIFrameWnd* pMdiFrmWnd…
开始学习OpenGL由于有一段时间,但是glfw只有窗口区,虽然通过某种手段(移步这里)可以加入工具栏,但仍然无法作为一个标准的GUI,而直接在MFC或Qt里面使用OpenGL API感觉有诸多制肘,各有利弊,所以打算将其嵌入GUI框架,此处以MFC为例 参考博文:https://blog.csdn.net/sunbibei/article/details/51783783 1.准备工作 由于要通过CreateProcess创建子进程的方式调用第三方exe程序,所以有必要知道创建的子进程信息,此…
老有人觉得MSComm通讯控件很土,更有人大声疾呼:忘了它吧.确实当我们对串口编程有了一定的了解后,应该用API函数写一个属于自己的串口程序,由于编程者对程序了解,对程序修改自如.但我一直没有停止过用MSComm通讯控件,那么简单的东西,对付简单的任务完全可以,但当我们需要在程序中用多个串口,而且还要做很多复杂的处理,那么最好不用MSComm通讯控件,如果这时你还不愿意自己编写底层,就用这个类:CserialPort类. 这是Remon Spekreijse写的一个串口类, 地址在: http:…
用VS08程序向导,单文档程序,默认设置生成的.工程名为3view; 其中默认生成的视图类CMy3viewView,对应3viewView.h,3viewView.cpp; 在Resourse View添加个新对话框,在对话框的属性中,Border设置成None;Style设置成Child; 生成的新类中Base class设置为CFormView;  本程序中定义类名为CDefFormView; 默认生成的文档类为:3viewDoc.h,3viewDoc.cpp; 在主框架头文件MainFrm…
1.在App类 构造函数中添加 EnableHtmlHelp(); 2.在Frame类中,添加消息影射: ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder) ON_COMMAND(ID_HELP, CFrameWnd::OnHelp) ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp) ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)…
需要在C**Doc和C**View中进行相应修改 图像打开: Doc.cpp中: BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename) { IplImage* pImg=NULL; pImg = cvLoadImage(csFilename,-1);      //  读图像文件(DSCV) if (!pImg) return(false); cvFlip(pImg);                           //  与 DI…
忽然无聊的想给自己写的程序保存的文件使用自己的名字简写作为后缀,于是有了下文. IDR_MAINFRAME格式介绍 IDR_MAINFRAME字符串资源中包含7个子串,分别以/n结束,即如下格式: <windowTitle>/n<docName>/n<fileNewName>/n<filterName>/n<filterExt>/n<regFileTypeId>/n<regFileTypeName>/n CDocTempl…
<其他教程:https://www.cnblogs.com/FlyAway2013/p/7510279.html> 先看看swagger的生态使用图: 其中,红颜色的是swaggger官网方推荐的. 下面再细看看swagger的生态的具体内容: swagger-ui 这玩意儿从名字就能看出来,用来显示API文档的.和rap不同的是,它不可以编辑. 点击某个详细API的可以试. swagger-editor 就是一个在线编辑文档说明文件(swagger.json或swagger.yaml文件)的…
新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_NEWMENU        WM_USER+101 操作工具栏和状态栏 使用GetDescendantWindow函数获取工具栏和状态栏的指针 为ID_HIDE添加消息映射,编辑代码如下 static bool m_Hide=false; m_Hide=!m_Hide; //获取工具栏指针 CWnd…
1 为什么是使用swagger? 1-1 当后台开发人员开发好接口,是不是还要重新书写一份接口文档提给前端人员,当然对于程序员最不喜欢的就是书写文档(当然文档是必须的,有利于项目的维护) 1-2 当后台人员开发接口,当然后台开发者也是需要测试好接口是否可用,当参数少的时候测试还不是很麻烦,当参数有十多个的时候,就需要后台开发者一个一个的拼接参数,很是耗时间而且还容易写错参数名,swagger就很好解决了这个问题(当然也是可以借助其他插件:rest-client工具,PostMan) 2 搭建环境…
VS 单文档 添加按钮 今天做项目需要在单文档中创建按钮来响应函数,即点击按钮,调用某函数,特此记录. 1. 在XXXView中添加CButton变量,例如 CButton start; 2. 下来就是 创建按钮 了 ① 在资源 Rescource.h 中注册一下 按钮 #define IDB_BUTTONSTOP(这是名字,自己起)     2000(这是编号,不要和其他的一样就好) ②下来创建按钮 右键 XXXView类->属性->消息->WM_CREAT->add(编辑函数)…
我用的vs05.先随便起个名字qwerty. 确定以后在左边最下面有一个生成的类,点击生成的类,把基类改成CFormView 最后点击完成就创建好了. 单文档的窗口不是后来创建后插入的,是在创建后就自带的.…
GET App   AfxGetInstanceHandle()    AfxGetApp()   GET Frame->View->Document     SDI    AfxGetMainWnd() -> GetActiveView() -> GetDocument()      MDI    AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument()  GET Menu    …
第一步:准备2个视图类(如CTViewOne, CTViewTwo) 第二步:在CMainFrame类的头文件中添加数据成员变量: //MainFrm.h protected: CSplitterWnd m_wndSplitter; 第三步:重载CMainFrame类的OnCreateClient函数: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代…
目录 项目的搭建 相关头文件的引用 添加成员变量vtkRenderer, vtkMFCWindow CXxxView()中实例化变量vtkRenderer CXxxView::OnInitialUpdate()中初始化变量vtkMFCWindow CXxxView::OnDraw(), 实现vtkMFCWindow的绘制 CXxxView::OnSize(), 窗口大小重绘 CXxxView::OnDestroy()中释放变量vtkRenderer CXxxView::~CXxxView()中释…
theApp构造, InitInstance void CMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO* lpMMI) BOOL CMyFrameWnd::OnNcCreate(LPCREATESTRUCT lpCreateStruct) void CMyFrameWnd::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp) int CMyFrameWnd::OnCreate(LPCREATE…
以VS2015中创建SDI为例 选择生成的类为:C***View,基类为CView,***为项目名 在***Doc.h和***Doc.cpp中创建数据模型,在***View.cpp的OnDraw()中通过pDoc指针获取Doc中的数据,并进行绘图 OnDraw(CDC* pDC)的/**/注释去掉,以使pDC指针生效 pDC->SetMapMode(MM_ISOTROPIC);//逻辑单位转换为带有对等缩放轴的任意单位.即X轴1单位与Y轴1单位是相等的.可使用SetViewportExt和Set…