使用WTL+OGRE编写3D程序(2) - 窗口消息函数
来源:互联网 发布:风油精 知乎 肛门 编辑:程序博客网 时间:2024/06/07 04:10
(接上文)
我使用一个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;
}
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的初始化以及渲染时机的问题,在下一节我会完成最后这部分(也是最重要部分)的讲述。
- 使用WTL+OGRE编写3D程序(2) - 窗口消息函数
- 使用WTL+OGRE编写3D程序(2) - 窗口消息函数
- 使用WTL+OGRE编写3D程序(4) - 多窗口的渲染
- 使用WTL+OGRE编写3D程序(4) - 多窗口的渲染
- 使用WTL+OGRE编写3D程序(1) - 基本框架
- 使用WTL+OGRE编写3D程序(1) - 基本框架
- 使用WTL+OGRE编写3D程序(3) - 场景的创建和渲染
- 使用WTL+OGRE编写3D程序(3) - 场景的创建和渲染
- VisualFC使用 - 处理WTL窗口消息
- WTL中的窗口消息传递
- WTL 窗口创建消息队列
- Ogre 3D程序设计 Ogre材质2
- WTL(2) - 写个简单的窗口程序玩玩
- 使用Ogre 3D 运动模型 -----OGRE 3D 1.7 Beginner‘s Guide中文版 第五章
- 学习WinxGui - WTL消息转换程序
- OGRE+CG学习日记[1]-简单的3D程序
- OGRE 3D 程序设计 材质 2 (转)
- OGRE 3D程序设计(2)
- 2008脚本大赛PowerShell初级组Event 10解题及分析
- 明天的任务安排
- spring in action 的Hello World
- linux 常用命令及技巧
- js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选
- 使用WTL+OGRE编写3D程序(2) - 窗口消息函数
- 找不到getter Property XXX问题解决方法
- C++中线程函数中方访问成员变量的问题
- Python中的bool
- 联想X300:成功的产品、失败的定价
- 在ASP.NET 2.0中直接得到本页面生成的HTML代码
- 干嘛要听你那些伤心的事啊
- 晕死,太奇怪了,远程连接oracle
- 回溯法介绍