zoukankan      html  css  js  c++  java
  • OSG+MFC对话框程序

    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) == -1)
              return -1;
      
          // TODO:  在此添加您专用的创建代码
          mOSG = new cOSG(m_hWnd);
          return 0;
      }
    6. 在OnInitialDlg()中添加以下代码,注意这一点与SDI程序不同,SDI程序是要overrideOnInitialUpdate().
          mOSG->InitOSG("cow.osg");
          mThreadHandle = (HANDLE)_beginthread(&cOSG::Render, 0, mOSG);
    7. 我不是代码啊、快放我出去呜呜 w_w  ●﹏●刚才被困到5后面的代码区了,幸好窝懂点HTML,改了HTML才跑出来。
    8. 这个时候程序就可以编译运行了,你会看到酱紫的:
    9. 看到这个运行结果很开心吧,但是呢,为了遵循《程序员的自我修养》,你看看第5步里面用了个new,所以还得delete一下。在类向导里面为yourdlg类添加OnDestory函数
      void CyourDlg::OnDestroy()
      {
          if(mOSG != NULL)
              delete mOSG;
      
          WaitForSingleObject(mThreadHandle, 1000);
      
          CDialogEx::OnDestroy();
      
          // TODO: 在此处添加消息处理程序代码
      }
  • 相关阅读:
    2016/4/27 xml
    2016/4/27 网络编程
    2016/4/25 java io
    mysql 基础列题
    数据库的语法
    数据库
    io流
    xml
    网络编程
    gui2
  • 原文地址:https://www.cnblogs.com/CoolSummer/p/3505694.html
Copyright © 2011-2022 走看看