我要发帖 回复

正式会员

4

主题

84

积分

0

专家分

兴趣点(最多三项):

视景仿真

私信
发表时间 : 2012-9-9 18:26:05 | 浏览 : 3359    评论 : 3
本帖最后由 wwwronin 于 2012-9-9 06:28 PM 编辑

前段时间在网上苦寻怎样在MFC中嵌入GLSUDIO,苦无结果,于是自己开动脑筋,在MFC下用最笨的办法嵌入了GLSUDIO。不过貌似仅支持VC6.0,在.net及以上版本编译没错,但是运行出错,估计是堆栈分配的关系吧,我也查不出来。
具体方法其实很简单:
1、请保持GLStudio工程设置为standalone.
2、将Glstudio的工程(即用.gls)文件生成.cpp、.h等文件,将source文件夹里除winmain.cpp以外的文件拷贝出来,放入到mfc工程目录下。(请保证.cpp文件不超过10M,负责编译不过)
3、例如我的工程名为:EHSI,则将生成的EHSIAPP类加入MFC工程。
4、设置编译路径:Include:C:\Program Files (x86)\GL Studio 3.2\include,C:\Program Files (x86)\GL Studio 3.2\include\FL,C:\Program Files (x86)\GL Studio 3.2\plugins\include,
                              Lib:C:\Program Files (x86)\GL Studio 3.2\plugins\lib,
                             c盘是我的glstudio的安装路径,请根据你的安装路径进行修改。
5、屏蔽相关预编译项,如下所示:
     //#ifdef _AFXDLL
    #include "stdafx.h"
    //#endif
6、将cpp文件中的main函数剪切,后面还有用。
7、编译时有很多警告,直接忽略即可。
8、将main函数的内容作为线程在VC中创建,示例线程入口函数代码如下:
    UINT CEmbdDlg::ThreadEntryEhsi(LPVOID lPvoid)
{





        CEmbdDlg* dlg = (CEmbdDlg*)AfxGetApp()->m_pMainWnd;
        EHSIClass* eHSI;
        
        glsCommandLine::Instance()->ReadCommandLine(1,NULL);
        
        eHSI = new EHSIClass("EHSI",742,725);
        eHSI->CreateObjects();
        
        
        //////////////////// User Code from section: "Main Initialization" ////////////
        ///////////////////////////////////////////////////////////////////////////////
        eHSI->SetRedraw();
        //        eADI->theWindow->hide();
        
        Timer frameTimer;

        
        do
        {
                //////////////////// User Code from section: "Main Loop" //////////////////////
                if( dlg->m_size && dlg->m_cy != 0 && dlg->m_cx != 0)
                {


                       //动态改变仪表窗口大小
                        eHSI->theWindow->resize(0,dlg->m_cy,dlg->m_cx,dlg->m_cy);
                        dlg->m_size = false;
                }
               
               
                eADI->fGlobVrtIns_MaxAirSpeed           = g_dataSwap.maxAirSpeed;
                eADI->fGlobVrtIns_AccelerationVertical  = g_dataSwap.verticalAcceleration;  
                eADI->bGlobVrtIns_RADCWork              = g_dataSwap.rightADCNormal;        
                eADI->fGlobVrtIns_LADCIAS               = g_dataSwap.indiAirSpeedInLeftADC;
                eADI->bGlobVrtIns_GSFail                = g_dataSwap.gsFailed;              
                eADI->bGlobVrtIns_AttFail               = g_dataSwap.attFailed;            
                eADI->fGlobVrtIns_GsDeg                 = g_dataSwap.gsDegree;              
                eADI->bGlobVrtIns_LocFail               = g_dataSwap.locFailed;            
                eADI->fRollDeg = g_dataSwap.rollDeg;
                eADI->pitchDeg = g_dataSwap.pitchDeg;

        
                ///////////////////////////////////////////////////////////////////////////////
                eHSI->RecordCalculateStart();
                eHSI->Calculate(frameTimer.ElapsedSecondsDouble());
                eHSI->RecordCalculateEnd();
        }
        while(eHSI->FrameAnimate());
        
        // Delete the instance
        //                delete eHSI;
        
        return 1;
}

有兴趣的可以交流下,但是我更想将它生成activex插件,苦于木有工具啊。
我的邮箱:luozxl@126.com,QQ就不留了,呵呵
最后上个效果图,很粗糙,望见谅。


无标题.png

最近VR访客查看更多↓

孤独的梦 评论于2012-9-24 21:00:45
按照楼主的步骤做下来,编译时还是报错了,不知道哪里的问题。楼主可以把源文件共享出来么。
另请教一下,如何实现GL studio的放大缩小功能,做的仪表界面比较大,如果不能放大,仪表界面基本看不清楚
ahuan 评论于2014-11-5 16:55:45
能将这个项目的源码发过来吗?我的邮箱1249534806@qq.com我知道怎样通过GlPlayer把它生成Active控件,但是我觉得这个方法更好!
xiarixiaoxiao 评论于2020-2-18 14:27:18
能传一份3.2给我吗?特别麻烦,谢谢!2447510536@qq.com

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-8-1 02:11 AM

返回顶部