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: 在此处添加消息处理程序代码
    }

最新文章

  1. python 学习第五天,python模块
  2. calendar 示例
  3. tiny4412SD启动盘的制作--1
  4. 远程管理之VNC
  5. Applied Functional Analysis(Applications to Mathematical Physics ) E.Zeidler
  6. MyEclipe 配置 ivy 插件
  7. 基于AFN的多张图片上传
  8. Golang 微信机器人包
  9. MS SQL 事物日志传送能否跨数据库版本吗?
  10. &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; 的作用
  11. Kruskal模板
  12. OO第二单元多线程电梯总结分析
  13. [Java]Socket和ServerSocket学习笔记
  14. go语言中的运算符^,&amp;
  15. 每天一个linux命令(12):more命令
  16. Yii GridView
  17. Java数组的初始化
  18. 创建私有maven服务器
  19. 探究Linux进程及线程堆栈专题&lt;一&gt;
  20. svn 安装 配置及同步

热门文章

  1. 如何在vmware上创建共享磁盘
  2. Android内存控制小技巧-使用矢量图来节省你的内存并简化你的开发。
  3. apple-touch-icon,shortcut icon和icon的区别
  4. 浅谈MySQL Replication(复制)基本原理
  5. WebAPI 时代
  6. JVM内存结构之三--持久代
  7. devexpress datagrid 与imageEdit以及如何存图片到数据库 z
  8. Python函数练习:冒泡算法+快速排序(二分法)
  9. 软件工程个人项目-Word frequency program by11061167龚少波
  10. AI钻石天鹅风格