OSG的sample里面有OSG+MFC+MDI的例子。

网上有说OSG+MFCSDI的例子,如http://blog.csdn.net/xuguangsoft/article/details/8164104

这里我说一下怎么在MFC对话框上结合使用OSG。

首先,对话框要保持干净,像酱紫:

然后,在你里osg sample里面找到那个OSG+MFC+MDI的例子(osgviewerMFC),在里面找两个文件:MFC_OSG.h 和 MFC_OSG.cpp。

把这两个文件拷到你自己的对话框项目的源代码目录下,然后在IDE里面添加到项目中。

接下来:

  1. 在你的 stdafx.h 中添加上 #include<process.h>
  2. 在你的工程dlg的头文件,比如yourdlg.h中添加 #include "MFC_OSG.h"
  3. 这个时候你的程序是编译通不过的,会出现好多链接error,是因为没有加OSG库。添加以下的库文件
    OpenThreadsd.lib
    osgd.lib
    osgDBd.lib
    osgFXd.lib
    osgManipulatord.lib
    osgParticled.lib
    osgShadowd.lib
    osgSimd.lib
    osgTerraind.lib
    osgTextd.lib
    osgViewerd.lib
    osgUtild.lib
    osgGAd.lib
    OpenThreads.lib
    osg.lib
    osgDB.lib
    osgFX.lib
    osgManipulator.lib
    osgParticle.lib
    osgShadow.lib
    osgSim.lib
    osgTerrain.lib
    osgText.lib
    osgViewer.lib
    osgUtil.lib
    osgGA.lib

    这个时候再把你的程序改为多字节编码(如果你使用的是unicode编码的话),然后就可以编译运行了。当然,是没什么变化的。

  4. 在yourdlg.h的类的定义中,添加两个protected属性的变量 

    cOSG* mOSG;
    HANDLE mThreadHandle;

  5. 在类向导中为yourdlg类添加消息响应WM_CREATE的函数OnCreate。
    int CyourDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CDialogEx::OnCreate(lpCreateStruct) == -)
    return -; // TODO: 在此添加您专用的创建代码
    mOSG = new cOSG(m_hWnd);
    return ;
    }
  6. 在OnInitialDlg()中添加以下代码,注意这一点与SDI程序不同,SDI程序是要overrideOnInitialUpdate().
        mOSG->InitOSG("cow.osg");
    mThreadHandle = (HANDLE)_beginthread(&cOSG::Render, , mOSG);
  7. 我不是代码啊、快放我出去呜呜 w_w  ●﹏●刚才被困到5后面的代码区了,幸好窝懂点HTML,改了HTML才跑出来。
  8. 这个时候程序就可以编译运行了,你会看到酱紫的:
  9. 看到这个运行结果很开心吧,但是呢,为了遵循《程序员的自我修养》,你看看第5步里面用了个new,所以还得delete一下。在类向导里面为yourdlg类添加OnDestory函数
    void CyourDlg::OnDestroy()
    {
    if(mOSG != NULL)
    delete mOSG; WaitForSingleObject(mThreadHandle, ); CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码
    }

OSG+MFC对话框程序的更多相关文章

  1. MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法

    http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序  屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下 ...

  2. VC++MFC对话框程序中给对话添加背景图片

    VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^   工具/原料 Visual C++ 2010 方法一:用Pic ...

  3. VS2010 MFC对话框程序用CButtonST给按钮添加图标

    也许是VS版本的关系,CButtonST中的BCMenu两个文件是无法编译通过的.   1.拷贝下载的CButtonST(我下载的v3.9)中的BtnST.h和BtnST.cpp文件到自己项目目录下. ...

  4. 添加RichEdit控件后导致MFC对话框程序无法运行的解决方法

    新建一个基于对话框的MFC程序,对话框上添加了RichEdit控件,编译成功后无法运行起来,Debug版本与Release版本均不行! Windbg分析结果: WARNING: Stack unwin ...

  5. mfc 对话框程序 托盘实现

    1 在头文件里面定义 消息 #define WM_SHOWTASK WM_USER+10 在主窗口类里面定义 一个变量 两个函数 a 变量 托盘结构体的变量 NOTIFYICONDATA m_nid; ...

  6. MFC对话框程序EDIT类控件的自动换行,垂直滚动条自动下移

    1.新建一个Edit Control,将其Multiline属性设置为True,Auto HScroll属性设置False,这样就可以实现每一行填满后自动换行了.   2.再将Vetrical Scr ...

  7. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

  8. 在c++MFC下用PCL显示操作点云文件 MFC对话框显示操作PCL点云

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/13115873.html 第一步 下载PCL库  我的版本是1.8.1的 你都要MFC下跑PCL ...

  9. MFC模态对话框程序不响应OnIdle

    从代码分析原因吧: OnIdle函数在MFC的CWinThread::Run函数中被调用,如下 // main running routine until thread exits int CWinT ...

随机推荐

  1. 【自动化测试】关于UI自动化的疑问(记录ing)

    1. 数据变动问题导致业务需要增加新的逻辑,这是增加case的健壮性还是浪费时间? 2. 如何做好PO? 不断数据抽离不断优化方法? 3. 如何提高调试代码的效率? /web可以 4. 主管不理解自动 ...

  2. geotools导出shapefile出错: java.io.IOException: Current fid index is null, next must be called before write()

    geotools导出shapefile出错: java.io.IOException: Current fid index is null, next must be called before wr ...

  3. linearlayout 水平垂直居中

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  4. Android的Adapter用法

    1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(ListView,GridView)等地方都需要用到Adapter.如下图直 ...

  5. <面试经典题>输入框的功能测试点分析

    (废话几句:这个是网上找来的一份模板,高亮部分为自己修改内容,且此面试题很像当年高考的“必考题”性质,触类旁通吧) 1. 输入框UI是否预计了输入内容长度(尽量完整的显示输入内容): 2. 输入框之前 ...

  6. c++ 对象内存布局详解

    今天看了的,感觉需要了解对象内存的问题.参考:http://blog.jobbole.com/101583/ 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个 ...

  7. 记录一下JS正则的坑

    JS正则的单行模式有点问题 总之 . 符号匹配换行符号会有问题 暂时的解决方案是 html = html.replace(/[\r\n]/g,""); 附加一个 html = ht ...

  8. Eclipse配置信息

    1.Eclipse VM arguments的保存位置: .metadata\.plugins\org.eclipse.debug.core\.launches (使用文件比较工具找出配置信息的保存位 ...

  9. 基于mapreduce的大规模连通图寻找算法

    基于mapreduce的大规模连通图寻找算法 当我们想要知道哪些账号是一个人的时候往往可以通过业务得到两个账号之间有联系,但是这种联系如何传播呢? 问题 已知每个账号之间的联系 如: A B B C ...

  10. php框架推荐

    ThinkPHP,  国内开发的框架,特别容易入门,中文文档细致,表述准确. Laravel, 国外框架,非常高级的一个框架,特别是前端比较模块化,但入门难一些,速度不高. laravel在lampp ...