单文档切换OpenGL视图

  1.新建一个是继承CView的新类CViewSecond

  2.menu中建两个菜单,在mainframe中添加对应的消息响应OnDataView,On3dView

   mainframe中添加成员变量m_curView;下面代码中ShowWindow(SW_SHOWMAXIMIZED),参数一定是最大化的参数啊,千万别写SW_SHOW,debug好大会儿,发现参数为SW_SHOW的时候视图rect为0啊,0啊。。。。只有移动窗口的时候才显示opengl,发现,ondraw函数死活不被调用,然后消息响应onpaint添加ondraw也不行。。。 最后试试试试 。。。参数的问题。。。。。残念啊。。。

 1 void CMainFrame::On3dView()
 2 {
 3     // TODO: 在此添加命令处理程序代码
 4     if (m_curView == ID_3D_VIEW)
 5     {
 6         return;
 7     }
 8     CView* pOldActiveView = GetActiveView();
 9     CRuntimeClass* pNewViewClass;
10     pNewViewClass = RUNTIME_CLASS(CViewSecond);
11     CCreateContext context;
12     context.m_pNewViewClass = pNewViewClass;
13     context.m_pCurrentDoc = GetActiveDocument();
14     CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
15     if (pNewView != NULL)
16     {
17         pNewView->ShowWindow(SW_SHOWMAXIMIZED);
18         pNewView->OnInitialUpdate();
19         SetActiveView(pNewView);
20         RecalcLayout(TRUE);
21         m_curView = ID_3D_VIEW;
22         pOldActiveView->DestroyWindow();
23     }
24
25
26 }
27
28 void CMainFrame::OnDataView()
29 {
30     // TODO: 在此添加命令处理程序代码
31     if (m_curView == ID_DATA_VIEW)
32     {
33         return;
34     }
35     CView* pOldActiveView = GetActiveView();
36     CRuntimeClass* pNewViewClass;
37     pNewViewClass = RUNTIME_CLASS(CDocView);
38     CCreateContext context;
39     context.m_pNewViewClass = pNewViewClass;
40     context.m_pCurrentDoc = GetActiveDocument();
41     CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
42     if (pNewView != NULL)
43     {
44         pNewView->ShowWindow(SW_SHOWMAXIMIZED);
45         pNewView->OnInitialUpdate();
46         SetActiveView(pNewView);
47         RecalcLayout();
48         m_curView = ID_DATA_VIEW;
49         pOldActiveView->DestroyWindow();
50     }
51
52 }

  3.CViewSecond中添加相应的初始化OpenGL的各种东西,OK。。。。

时间: 2024-08-03 11:27:24

单文档切换OpenGL视图的相关文章

MFC单文档静态分割视图

//声明一个分割对象 CSplitterWnd      m_wndSplitter; //在CMainFrame.cpp中重载函数OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) //代码当中的CMedicTreeView和CMedicListView是继承CView的类 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pConte

VC项目开发之单文档多视图实现-非分割窗口[转]

k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 多视图是VC开发中经常要用到的技术之一,一般地实现单文档多视图有两种方式 1)通过视图分割的技术(使用CSplitterWnd实现),将窗口分割为多个部分,每个部分显示各自显示不同的视图,这种技术实现起来比较简单,并且相关的资料也很多. 2)通过一个文档关联多个视图,窗口显示整个视图. 第二种实现较第一种复杂,这里给出详细的实现方法. Step 1:使用VC 6.0新建一个Project,命名为:Mu

单文档视图架构

1.相关问题 只能管理文档(只能有一个文档对象) 2.相关类 CDocument / CView / CFrameWnd / CWinApp CDocManager -文档管理类 CSingleDocTemplate -单文档模版类 3.关系图 theApp |---->m_pDocManager  //文档管理类对象地址 |---->m_templateList |---->CSingleDocTemplate(pTemplate) |---->m_pOnlyDoc  //文档类

openGL三维网格坐标,旋转,缩放,灯光设置,纹理读取,模型读取(MFC单文档)

最近学习计算机图形学写的基于opengGL的作业 源码下载链接:链接:http://pan.baidu.com/s/1slANShZ 密码:hbwj 1.三维网格坐标建立 2.基本3维图形创建 3.鼠标相应旋转缩放 4.键盘相应旋转缩放 5.灯光设置 6.纹理载入映射 7.读取模型 关于MFC配置编写openGL网上有很多教程 需要的函数创建一般是: OnCreat() OnDestroy() Onsize() PreCreateWindow() OnDraw() 在我的MFC单文档项目中ena

7.MFC单文档视图构架程序

一.单文档视图构架程序 1.相关问题 只能管理一个文档(只有一个文档类对象) 2.相关类 CWinApp / CFrameWnd / CView / CDocument CDocTemplate - 文档模板类 CSingleDocTemplate - 当文档模板类 CDocManager - 文档管理类 3.关系图

MFC单文档的视图分割

最近做的工作里包括了MFC单文档的分割,过程很简单,但还是想记录下来. 如下进行了单文档分割为三个视图的操作: 1 利用类向导建立额外的两个view  基类是CView 2 在mainFirm.cpp中包含两个新加的view的头文件 3 在mainFirm.h中添加分割窗口的成员变量CSplitterWnd m_wndSplitter; 4 在mainFirm.cpp中重写oncreateclient BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT

单文档工具栏按钮

刚开始学习MFC单文档的使用,想在工具栏上添加一个按钮.在那个空白按钮上,画上图案,就会新增一个按钮.然后利用类向导添加响应消息.在"命令"中找到按钮的ID,添加COMMAND消息处理.这是按钮就会由灰色,变成可用状态.添加事件处理函数如: void CMainFrame::OnFormview1() { AfxMessageBox(_T("ok")); m_bBtn1 = FALSE; } //如果想禁用此按钮,可以定义一个类成员变量,如下: void CMain

MFC:“Debug Assertion Failed!” ——自动生成的单文档程序项目编译运行就有错误

今天照着孙鑫老师的VC++教程学习文件的操作,VS2010,单文档应用程序,项目文件命名为File,也就有了自动生成的CFileDoc.CFileView等类,一进去就编译运行(就是最初自动生成的项目),编译通过,可运行时直接弹出错误框,有点小懵,,,啥都没做就给我看这个: 图一   错误提示框 后来搜索一查,网上好多类似的错误以及解决方案,几乎都试了个遍,有: 方法(1)-重新生成解决方案,或者将项目文件目录下Debug文件夹删了,重新生成Release版: 方法(2)-可以先声明一个临时的C

MFC单文档下使用非模态对话框

由于自己写的程序是自动获取桌面实时图像,所以用模态对话框导致程序出错,目前粗鄙的理解是模态对话框会让对话框所在线程暂停,当关闭对话框后才能继续操作,而非模态对话框可以不必让程序暂停. 下面记录非模态对话框的创建过程: 1 在单文档中新建一个对话框资源并生成对话框类 CRadiusDlg 2 在视图类C**view.cpp中添加对话框的头文件,并添加一个对话框类的指针变量CRadiusDlg *pModalessDlg; 3 在菜单栏添加一个用于显示对话框的菜单项,并在响应事件处,添加事件处理代码