在listctrl中选中一项后需要显示opengl建模的场景,并且在该场景里进行漫游
能不能提供点思路啊,谢谢了大家了

解决方案 »

  1.   

    openGL里的绘画函数 根据stage的值= stage1  stage2  stage3 来 switch
    然后点击list的时候,更改stage就可以了。
    关于list的双击问题。
    双击事件()
    {
       获得选中项的ID;
       获得该ID项的文字;
       if(文字==**)
         stage=*****;
    }
    或者你直接拿在list中的ID来判断,不过我每次总觉得那个ID有点悬呼呼的,怕它变顺序。
    具体的功能函数见MSDN或者百度list 成员函数。
      

  2.   

    漫游就是glulookat() 
    这个就涉及openGL具体的了。
    不谈。
      

  3.   

    谢谢 emptyness(问题事小,结帐事大~) 
    漫游倒还好
    只是模型是3ds文件用opengl读取并绘制的
    而且选择listctrl不同项,相应的3ds文件也不同
    就是觉得选中后该怎么响应还是不明白
      

  4.   

    全局变量 int stage;
    //区别 的宏
    #define STAGE_1 1
    #define STAGE_2 2
    #define STAGE_3 3init()//openGL初始化
    {
       ....
      load3ds("**1.3ds");
      load3ds("**2.3ds");
      load3ds("**3.3ds");
      ...
    }
    render()//GL绘画
    {
       ..  //清空显存中颜色和深度缓存.
       ..  //基本坐标变换
      switch(stage)
     {
        case  STAGE_1:
            render3ds(***1.3ds);
            break;
        case  STAGR_2:
          ....
      }
      ...
    }
    在listCtrl中重载双击事件:
    {
       int i=getcursel(); //获得被选中的ID号
        CString s;
       getitemtext(i,s);//获得该ID号的内容
       switch(s)
      {
         case "***1"
            stage=STAGE_1;
             break;
         case "****2"
             stage=STAGE_2;
             break;
          ..
       }
    }
    由于GL的render是不断运行的,它马上会对stage的变化做出反映.
    暂时在家中,没装VC,所以没办法给你写出listctrl那些函数的名字.但那些功能都是有。在VC按
    ->或是.自己查看下吧.}
      

  5.   

    谢谢 emptyness(问题事小,结帐事大~) 的指点
    选中建模已经可以实现了
    另外,那个漫游的程序原来是用api函数写的,不知道如何正确加到mfc工程里,现在一次漫游以后关闭绘制模型的窗口,整个程序都会结束,无法重新选择并漫游
      

  6.   

    整个程序都会结束,那就是代码的问题了.你是多个窗口吗? 主窗口这边有个list, 一点create一个window进行绘画?这样的话就不会结束的..应该你是把绘画的窗口弄成主窗口了.
    你说的这个现象是在MFC里出现的吧.
    单文档程序?? 对话框不好吗?这个由于代码的原因我就不好帮了..我无法知道你的问题出在哪里.  
    自己注意下代码或者问下周围熟悉MFC程序的人吧,把问题给你讲清楚,他看着代码,应该就能解决的..
      

  7.   

    我才上手的,好多知识都还太清楚
    是一个对话框程序,对话框里有个list,我原来只知道一个程序只能有一个winmain函数,所以就把原来漫游程序winmain函数里的代码(包括CALLBACK WndProc)加到了list的OnClickList操作里面了,我知道这样肯定是不行的(就像出现上面那种问题),但不知道如何下手改
      

  8.   

    昏,你竟然能加的上去..晕 受教了..
    它不会说你winmain()  重复定义了吗??
    (你的程序里应该 没CWinApp的子类吧,呵呵)呵呵..没事慢慢来..
    加油了,这样的事情你也知道.没办法帮的.慢慢来.都有个过程的.只要努力学就OK.
    祝你进展神速..呵呵
      

  9.   

    有CWinApp的子类
    我没把winmain()函数定义加进去,只是把函数里面的相关实现代码加进去的,所以才不会有编译错误的吧
    但回调函数我还是完整地加进去的(我也不知道为什么加了没报错)
      

  10.   

    还是没搞定
    先结贴了
    谢谢emptyness(问题事小,结帐事大~)