我要发帖 回复

中级会员

33

主题

643

积分

0

专家分

兴趣点(最多三项):

VegaPrime
Openscenegraph
军事仿真

私信
发表时间 : 2010-1-14 22:08:07 | 浏览 : 1102    评论 : 7
我想实现如下图通道切换:
d:\ee\main.jpg

这是三个通道的初始状态

d:\ee\1.jpg
d:\ee\2.jpg
d:\ee\3.jpg
d:\ee\4.jpg
有一个按钮响应事件代码如下

  1.         int Chanmode=0;//全局变量
  2. void CMFCView::OnViewBottombar()
  3. {

  4.         if (Chanmode==0)
  5.         {
  6.                 m_nearchan->setDrawArea(0,1,0,1);
  7.                 m_Farchan->setDrawArea(0,0,0,0);
  8.                 m_Freechan->setDrawArea(0.65,1,0,0.5);
  9.                 Chanmode=1;

  10.                 return;
  11.         }
  12.         if (Chanmode==1)
  13.         {
  14.                 m_nearchan->setDrawArea(0,1,0,1);
  15.                 m_Farchan->setDrawArea(0,0,0,0);
  16.                 m_Freechan->setDrawArea(0,0,0,0);

  17.                 Chanmode =2;

  18.                 return;
  19.         }/**/
  20.         if (Chanmode==2)
  21.         {
  22.                 m_nearchan->setDrawArea(0,0,0,0);
  23.                 m_Farchan->setDrawArea(0,1,0,1);
  24.                 m_Freechan->setDrawArea(0,0,0,0);
  25.                 Chanmode =3;
  26.                 TRACE("Chanmode=%d\n",Chanmode);
  27.                 return;
  28.         }/**/       

  29.         if (Chanmode==3)
  30.         {
  31.                 m_nearchan->setDrawArea(0,0,0,0);
  32.                 m_Farchan->setDrawArea(0,0,0,0);
  33.                 m_Freechan->setDrawArea(0,1,0,1);
  34.                 Chanmode =4;
  35.                 return;
  36.         }/**/       
  37. [b][color=Red]        if (Chanmode==4)
  38.         {
  39.                
  40.                 m_Farchan->setDrawArea(0,0,0,0);
  41.        
  42.                 m_nearchan->setDrawArea(0.65,1,0,0.5);
  43.                 m_Freechan->setDrawArea(0,.9,0,.9);
  44.                 double l,r,b,t;
  45.                 m_nearchan->getDrawArea(&l,&r,&b,&t);
  46.                 TRACE("Chanmode=%f %f %f %f \n",l,r,b,t);
  47.                 Chanmode =5;
  48.                 return;
  49.         }/**/[/color][/b]       

  50.         if (Chanmode==5)
  51.         {
  52.                 m_nearchan->setDrawArea(0,1,0,1);//(0.65,1,0.65,1)
  53.                 m_Farchan->setDrawArea(0.65,1,0.65,1);
  54.                 m_Freechan->setDrawArea(0.65,1,0,0.5);
  55.                 Chanmode =0;
  56.                 TRACE("Chanmode=%d\n",Chanmode);
  57.                 return;
  58.         }/**/       

  59. }
复制代码
结果上面标红的代码,也就是Chanmode =5这种情况,老是出现和Chanmode =4一样的布局情况,也就是1号通道不能出现在3号通道满屏的右下角(通过测试缩小的1号通道藏在3号通道下面,也就是说被3号通道盖住了)。
其他切换布局很正常。请问大侠出现这种问题怎么回事?我找了好久不知道问题在那?难道这些通道还有优先级吗?

最近VR访客

99daodan 评论于2010-1-14 22:11:07
图片上传真麻烦:看看这:
D:\ee\mian.jpg
img]D:\ee\1.jpg[/img]

img]D:\ee\2.jpg[/img]
img]D:\ee\3.jpg[/img]
img]D:\ee\4.jpg[/img]
99daodan 评论于2010-1-14 22:20:06
图片添加不上郁闷!
lblzx 评论于2010-1-15 19:13:21
和通道次序有关系,加上次序切换就可以
99daodan 评论于2010-1-15 20:40:26
楼上说得很对,是有次序关系。先在acf文件中定义的通道要是和后定义的通道重合,就会被后定义的遮住。
不过我找了半天,还是没有找到那个函数来调整 通道的order。
请赐教!
99daodan 评论于2010-1-15 20:41:40
楼上说得很对,是有次序关系。先在acf文件中定义的通道要是和后定义的通道重合,就会被后定义的遮住。
不过我找了半天,还是没有找到那个函数来调整 通道的order。
请赐教!
99daodan 评论于2010-1-19 22:25:09
自己来顶贴吧!!问题解决了。
切换之前先把通道与window之间的关系解除掉(removechannal),然后再调换次序和window之间的关系绑上(addchannal)。
就ok了。呵呵
hycldn 评论于2010-1-20 23:52:28
有道理

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

GMT+8, 2021-3-7 07:13 PM

返回顶部