查看: 1931|回复: 5

求教:MFC中动态创建的CView中无法显示osg图形

[复制链接]

该用户从未签到

发表于 2011-11-21 21:20:31 | 显示全部楼层 |阅读模式
我在MFC中创建一个对话框,其右侧动态创建了一个CView的子类CTDFlowView的实例,仿照osgViewerMFC那个例子,写了
int CTDFlowView::OnCreate( LPCREATESTRUCT lpCreateStruct )
{
        if (CView::OnCreate(lpCreateStruct) == -1)
                return -1;
        MessageBox(_T("OnCreate"),_T("OnCreate"),MB_OK);
        m_pOsg = new cOSG(m_hWnd);
        m_pOsg->InitOSG("cow.osg");

        mThreadHandle = (HANDLE)_beginthread( &cOSG::Render,0,m_pOsg);
        TRACE(_T("CTDFlowView::OnCreate"));
        return 0;
}
可是在对话框右侧仅出现了一片背景色深蓝色,没有出现那只可爱的牛,模型路径是没问题的,因为直接创建单文档工程时可以看到牛。
upload.jpg


动态创建CTDFlowView的代码(在CMainDlg::OnInitDialog()函数中):
                CCreateContext pContext;
                CWnd* pFrameWnd = this;
                pContext.m_pCurrentDoc = new CTDViewDoc;
                pContext.m_pNewViewClass = RUNTIME_CLASS(CTDFlowView);
                CTDFlowView *pView =(CTDFlowView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
                m_pFlowView =pView;

                m_workflowRect.left = m_leftPanelRect.right +2 ;
                m_workflowRect.right = rtClient.right -1 ;
                m_workflowRect.top = TOP_PADDING ;
                m_workflowRect.bottom = rtClient.Height();
                m_pFlowView ->MoveWindow(m_workflowRect);
                m_pFlowView->ShowWindow(SW_NORMAL);


求教各位前辈,O(∩_∩)O谢谢!

该用户从未签到

发表于 2011-11-21 22:06:12 | 显示全部楼层
QT中也有同样困惑。

该用户从未签到

发表于 2011-11-22 09:38:22 | 显示全部楼层
本帖最后由 CWorld 于 2011-11-22 09:39 编辑

不知道为什么,你的附件我就是下载不了,估计是论坛的权限有些问题。
1深蓝色背景出来了,你把模型路径改为绝对路径试试,
2 或者你再新创建的View里的OnInitUpdate里响应下
“ m_pOsg->InitOSG("cow.osg");
    mThreadHandle = (HANDLE)_beginthread( &cOSG::Render,0,m_pOsg);”
3  不行,在调试跟踪下,或者把节点写出到.osg文件,看看牛存在不?

该用户从未签到

 楼主| 发表于 2011-11-22 11:51:33 | 显示全部楼层
多谢VR专家的关注哈,那个附件就是一个截图,右侧view只有深蓝背景的截图。
绝对路径仍然只有深蓝背景
我自己创建的View的OnInitUpdate不会被调用,有种说法说View没有关联一个文档所以OnInitUpdate不会被调用
但是我动态创建CTDFlowView的代码应该已经关联了文档了吧?
                                                                pContext.m_pCurrentDoc = new CTDViewDoc;
                pContext.m_pNewViewClass = RUNTIME_CLASS(CTDFlowView);
                CTDFlowView *pView =(CTDFlowView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
Debug找不出问题,都顺利执行下来了,writeNodeFile也可以把牛写出来,600+K的osg文件
不过View里就是不显示,郁闷啊

该用户从未签到

 楼主| 发表于 2011-11-22 11:53:24 | 显示全部楼层
CWorld 发表于 2011-11-22 09:38
不知道为什么,你的附件我就是下载不了,估计是论坛的权限有些问题。
1深蓝色背景出来了,你把模型路径改为 ...

多谢VR专家的关注哈,那个附件就是一个截图,右侧view只有深蓝背景的截图。
用绝对路径仍然只有深蓝背景 T_T
我自己创建的View的OnInitUpdate不会被调用,有种说法说View没有关联一个文档所以OnInitUpdate不会被调用
但是我动态创建CTDFlowView的代码应该已经关联了文档了吧?
                                                                pContext.m_pCurrentDoc = new CTDViewDoc;
                pContext.m_pNewViewClass = RUNTIME_CLASS(CTDFlowView);
                CTDFlowView *pView =(CTDFlowView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
Debug找不出问题,都顺利执行下来了,writeNodeFile也可以把牛写出来,600+K的osg文件
不过View里就是不显示,郁闷啊
附件是工程
TDPlat.zip (6.19 MB, 下载次数: 113)

该用户从未签到

 楼主| 发表于 2011-12-1 10:56:33 | 显示全部楼层
这个问题解决了,是窗口区域的问题,谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表