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

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM