将三维图形显示在一CFormView中的指定的Static控件中(将Static控件指定为显示图像)怎么做?万分感谢!!!!!!!!!!!!!!!!我按照http://tech.163.com/05/0304/10/1E0CDS5R00091589.html中的源码做了一遍,但还是画不出图像,怎么搞的。
按照文中:"在适当的地方调用m_openGL.RenderGLScene()就可以了"
我尝试在对话框中的OnPaint()中调用m_openGL.RenderGLScene()但是画不出图像。对话框打开时是出现一种忙的状态,但是却没有图像出现,然后一切都正常了,对话框还是原来的对话框,Static控件中一点图形也没有。
大侠们,救命啊!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    Static控件中也要设置opengl初始化环境。
      

  2.   

    在COpenGL类中有设置opengl初始化环境啊,而且我在CView类中的初始化更新中调用CRect rect;
    m_openGL.Create(rect, this);
    用CView类来担当父类就成功了,画了一个立方体,效果很好,我把COpenGL中添加了对WM_ERASEBKGND消息的处理,不然图形一闪就没有了。不过我还是想在Static控件中来显示图像,楼上的 syy64(太平洋)大侠多给点意见,能有一个完成成功的源码就好了,, 大侠们快来啊。
      

  3.   

    在OnDraw()中调用的m_openGL.RenderGLScene();
      

  4.   

    而且我同时还可以在CView类中随意使用GUI绘图,让二维图形与OpenGL绘制的三维图形在视窗中并存。
      

  5.   

    想在控件里画opengl就得在控件的onpaint函数里执行画的功能啊。
      

  6.   

    在哪里处理控件的onpaint函数, 在预处理消息函数中识别是控件的WM_PAINT消息吗?
      

  7.   

    // 对话框中有关的函数
    class COpenGLC_Dlg : public CDialog
    {
    // Construction
    public:
    COpenGLC_Dlg(CWnd* pParent = NULL); // standard constructor .....// Implementation
    protected:
    COpenGL m_openGL; .....
    };BOOL COpenGLC_Dlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); ...... // 系统自动生成代码

    // TODO: Add extra initialization here
    CRect rect;

    GetDlgItem(IDC_OPENGL)->GetWindowRect(rect);

    ScreenToClient(rect);

    m_openGL.Create(rect, this); return TRUE;  // return TRUE  unless you set the focus to a control
    }BOOL COpenGLC_Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    if (pMsg->message == WM_PAINT)
    {
    if ( ::GetDlgCtrlID(pMsg->hwnd) == IDC_OPENGL)
    {
    m_openGL.RenderGLScene();
    return TRUE;
    }
    } if (pMsg->message == WM_ERASEBKGND)
    {
    if ( ::GetDlgCtrlID(pMsg->hwnd) == IDC_OPENGL)
    {
    return TRUE;
    }
    }

    return CDialog::PreTranslateMessage(pMsg);
    }/////////////////////////////////////////////////////////////////////////////////////////////
    其余的就是COpenGL的定义了,就是OpenGL环境的初始化, 对WM_CREATE, WM_PAINT, WM_ERASEBKGND, WM_SIZE作了处理,在视图环境下可以绘制图形,说明该类是没有问题的。关键是在哪儿调用m_openGL.RenderGLScene();
    望大侠们多多参与讨论,进来的一律有分。
      

  8.   

    控件也是一个窗口,你要像处理view和dialog一样的对待它。
      

  9.   

    太平洋大侠,我没有重载该Static控件来构造一个新的类,我只有派生了一个窗口类,况且我在COpenGLC_Dlg对话框类中的PreTranslateMessage()函数处理了Static控件的一些消息,还要怎样做,请具体点好吗?
      

  10.   

    那不行,要从static派生自己的类,然后像处理view类一样处理它。
      

  11.   

    我看也是,这样从static派生的类的处理和CView类中一样了,那肯定可以做得到了。