我要发帖 回复

中级会员

15

主题

121

积分

0

专家分

水面上的小草

:

私信
发表时间 : 2007-10-10 09:58:51 | 浏览 : 3600    评论 : 5
环境:VP1.2 和 vc++6.0
按照论坛上提供的例子写的基于计时器的MFC程序.因为程序比较长,所以简单的贴出说明问题的代码.
在 CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)中打开sample0.acf,程序运行正常.
//--------------------------------------------------------------------------
  vpKernel::instance()->define(acfFile);   //acfFile = "sample0.acf";
  vpKernel::instance()->configure();       
  ....
  vpWindow *vpWin = *vpWindow::begin();
  vpWin->setParent(m_hWnd);
  ....
  int frameNum = vpKernel::instance()->beginFrame();
  assert(frameNum != 0);
  vpKernel::instance()->endFrame();
  ....
  const int TIMER_ID = 1000;                                                       
  int returnValue = ::SetTimer(this->m_hWnd ,TIMER_ID, 10, NULL);        //计时器          
  assert(returnValue == TIMER_ID);
//--------------------------------------------------------------------
  在 CMfc1View::CloseFile()关闭打开的acf文件.
  ::KillTimer(this->m_hWnd,TIMER_ID);                     //先销毁计时器,
  vpKernel::instance()->breakFrameLoop();                 //跳出VP循环
  int frameNum = vpKernel::instance()->beginFrame();
  assert(frameNum == 0);                                  //正常跳出了
  if(vpKernel::instance()->isConfigured())
      vpKernel::instance()->unconfigure();                 //取消配置.这里出错
  ....
  //vp::shutdown();             //关闭VP,应该用不到,因为还会再打开acf文件   
//--------------------------------------------------------------------------------
程序执行到unconfigure()处,出现错误对话框Assertion Failed!      Expreession:(m_bConfigured)
注释掉unconfigure()相关的几行,能够关闭acf文件,程序的VIEW区清空.
在void  CMfc1View::OpenFile(CString strFileName)函数中打开acf文件
  vpKernel::instance()->define(acfFile);           //acfFile = "sample0.acf",和OnCreate()中相同
  //result = vpKernel::instance()->configure();          //不能配置,出错
  //下面OnCreate()中载入acf文件的代码相同
  ....
  vpWindow *vpWin = *vpWindow::begin();
  vpWin->setParent(m_hWnd);
  ....
  int frameNum = vpKernel::instance()->beginFrame();
  assert(frameNum != 0);
  vpKernel::instance()->endFrame();
  ....
  const int TIMER_ID = 1000;                                                       
  int returnValue = ::SetTimer(this->m_hWnd ,TIMER_ID, 10, NULL);        //计时器          
  assert(returnValue == TIMER_ID);
//--------------------------------------------------------------------------
最终程序运行不会报错,但是VIEW区没有显示acf文件.
请问:1.上面程序中关闭acf文件时unconfigure()为何出错?应该怎么解决?
    2.在OnCreate()中不存在问题的acf文件,重新打开后为何不能显示?
    3.打开acf文件后不能configure(),是否因为之前没有unconfigure()的原因?
    3.有没有另外可行的基于计时器的MFC程序中关闭和打开acf文件的方法?因为对于线程的MFC程序更不好控制.
    4.另外在基于计时器的MFC程序中关闭和打开acf文件时要注意那些问题?

欢迎遇到相同问题的朋友来交流,期待高人来指点

[ 本帖最后由 kevin0442 于 2007-10-10 10:01 AM 编辑 ]

最近VR访客

obuil 评论于2007-10-10 11:03:17
::KillTimer(this->m_hWnd,TIMER_ID);                     //先销毁计时器,
  vpKernel::instance()->breakFrameLoop();                 //跳出VP循环
  int frameNum = vpKernel::instance()->beginFrame();
  assert(frameNum == 0);                                  //正常跳出了
  if(vpKernel::instance()->isConfigured())
      vpKernel::instance()->unconfigure();           

killtimer放在后面试试 你让vp先关闭完

你的思路是想不重起程序 就打开另外一个acf  很多人都试过这种思路 官方都说不行
kevin0442 评论于2007-10-10 14:17:21
感谢obuil兄.:)
killtimer放在后面也试过,就是不行,timer会一直运行的.
难道没有办法不重起程序就能打开另外的acf文件?
要是必须轮换着打开很多acf文件要怎么做?只能关闭程序再选择acf重起程序?
obuil 评论于2007-10-10 15:35:51
daiyulianghg 评论于2007-10-31 21:15:26
学习!!!
寻の三叶草 评论于2007-10-31 22:28:26
学习了

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

GMT+8, 2021-10-29 05:18 AM

返回顶部