您的位置:首页 > 其它

使用WTL+OGRE编写3D程序(2) - 窗口消息函数

2013-03-03 17:49 337 查看
(接上文)

我使用一个Static渲染3D场景,最基本的需要我们处理的消息和这些消息中的任务是:

WM_PAINT     ---         在窗口更新时将3D场景渲染到窗口

WM_SIZE       ---         在窗口大小改变时更新相应的场景大小和比例,当然对于Static之类的控件来说没有什么必要,但是如果你想在一个一般的View里渲染,这是必须的

WM_CREATE ---        完成OGRE的初始化

WM_DESTROY/WM_QUIT --- 完成OGRE的释放

WM_ERASEBKG --- 这个没什么用,直接返回TRUE告诉系统我们将自己绘制背景

下面是消息响应函数的代码:

 

// Message Handler
public:

    LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)

    {

        Initialize();

        bHandled = FALSE;

        return 1;

    }

    LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)

    {

        return 1;   // no background needed
    }

    LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)

    {

        T* pT = static_cast<T*>(this);

        if(wParam != NULL)

        {

            pT->Render((HDC)wParam);

        }

        else

        {

            CPaintDC dc(m_hWnd);

            pT->Render(dc.m_hDC);

        }

        return 0;

    }

    LRESULT OnSize(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)

    {        

        if(m_pRenderWindow)

        {

            m_pRenderWindow->resize(LOWORD(lParam), HIWORD(lParam));

        }

        bHandled = FALSE;

        return 1;

    }

    LRESULT OnQuit(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)

    {        

        T* pT = static_cast<T*>(this);

        pT->ReleaseOgre();

        SAFE_DELETE(m_pRoot);

        bHandled = FALSE;

        return 1;

    }

 其中m_pRenderWindow是OGRE创建的一个渲染窗口,Render是主要的渲染函数,Initialize中完成了OGRE的初始化,OK,到这里窗口控件方面的工作基本完成了,接下来主要是关于OGRE的初始化以及渲染时机的问题,在下一节我会完成最后这部分(也是最重要部分)的讲述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐