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

(接上文)

我使用一个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的初始化以及渲染时机的问题,在下一节我会完成最后这部分(也是最重要部分)的讲述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值