第5.2.2 节对VP3_2_7.cpp 中的main 函数进行了改造,改造为PublicMember的静态成员PublicMember::CTS_RunBasicThread。这其中还包含3个控制变量:
● 场景窗口句柄:“static HWND CTS_RunningWindow;”这个变量就是某个控件的句柄,在这个应用中,把Vega Prime 仿真窗口显示在一个分组控件上。
● 控制VP 线程运行的变量:“static bool CTS_continueRunVP;”,Vega Prime应用程序配置完成后,就进入帧循环,要退出程序,首先应该退出帧循环,就用这个布尔变量来控制是否继续进行帧循环。
● VP 线程变量:“static CWinThread * CTS_vegaThread;”,用这个变量控制主线程。
在图5.2.9 中,PublicMember::CTS_RunBasicThread 函数首先调用静态函数vp::initialize (__argc,__argv)对 Vega Prime 进行初始化,其两个参数前面都是两根下划线;然后调用PublicMember::CTS_Define()函数进行场景定义;接着调用vpKernel::instance()-> configure()进行配置;接下来就是设置窗口,其中要特别注意的是vpWin->setParent (PublicMember::CTS_ RunningWindow),就把Vega Prime的窗口设置在了指定控件上,当然,在启动线程之前要给PublicMember::CTS_RunningWindow 赋值;最后就是进入帧循环,在每次帧循环后,可以在这里完成某些工作,现在,只是简单判断是否要停止帧循环,如果要停止,首先用vpKernel::instance()->unconfigure()取消配置,然后调用vp::shutdown(),关闭Vega Prime。
图5.2.9 Vega Prime应用程序主线程函数
在第5.2.1 节中改造了对话框程序,在“运行”按钮下添加以下代码:
CWnd *pWnd=GetDlgItem(IDC_grScene);
PublicMember::CTS_RunningWindow=pWnd->GetSafeHwnd();
PublicMember::CTS_continueRunVP=true;(www.daowen.com)
PublicMember::CTS_vegaThread=AfxBeginThread(PublicMember::CTS_RunBasicThread,this);
前两句代码就是获取ID 为“IDC_grScene”的分组框的句柄,并赋值给PublicMember::CTS_RunningWindow,作为Vega Prime应用程序运行的场所;接着为控制变量赋值,要允许帧循环;最后启动线程主函数。
在“关闭”按钮下添加以下代码:
PublicMember::CTS_continueRunVP=false;
Sleep(1000);
OnOK();
第一行代码就是停止Vega Prime应用程序的帧循环;接着等待1 秒,使主线程正确地停止返回。
这两个按钮的代码完成,就可以运行Vega Prime应用程序了。首先选择VC的菜单“调试”,然后选择其下的“直接运行(不调试)”。这样就可以编译生成第一个可运行的Vega Prime应用程序了,点击“运行”按钮,将会出现如图5.2.10所示的界面。Vega Prime应用程序运行在了MFC 对话框程序里面。与LynX Prime 里运行ACF 文件一样,在运行界面里可以用鼠标操作汽车:按鼠标左键,汽车加速前进;按鼠标右键,汽车后退。实例代码为 VPTestDialogBasic。
图5.2.10 改造后的MFC 对话框界面
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。