修改cocos2dx,处理win32窗口事件

来源:互联网 发布:加盟淘宝大品牌 编辑:程序博客网 时间:2024/06/02 02:29

用cocos2dx做win32版《捕鱼之海底捞》需要处理窗口关闭之类的事件。但自己对windows不了解,又没找到别的的方法,只好改动了一下cocos2dx的源码来实现,具体步骤如下:

1 打开/cocos2dx/include/CCLayer.h
在CCLayer的public下添加:
#if (CC_TARGET_PLATFORM CC_PLATFORM_WIN32)
virtual void windowProc(UINT message, WPARAM wParam, LPARAM lParam);
#endif


2 打开/cocos2dx/layers_scenes_transitions_nodes/CCLayer.cpp
添加代码:
#if (CC_TARGET_PLATFORM CC_PLATFORM_WIN32)
void CCLayer::windowProc(UINT message, WPARAM wParam, LPARAM lParam){
}
#endif


3 打开/cocos2dx/platform/win32/CCEGLView_win32.h
在CCEGLView类定义上声明
class CCLayer

在CCEGLView类的private下添加变量
CCLayer *winHandLayer;

在public下添加函数
void setWin32WindowHandle(CCLayer *layer){
winHandLayer = layer;
}


4 打开/cocos2dx/platform/win32/CCEGLView_win32.cpp
在文件开始部分添加
#include "CCLayer.h"

在CCEGLView构造函数中添加代码:
winHandLayer = NULL;

在WindowProc函数开始的部分添加代码:
if(NULL != winHandLayer){
winHandLayer->windowProc(message, wParam, lParam);
}

注掉
case WM_CLOSE:及相关语句(这是为了不使用默认的关闭,而自己去实现关闭时的逻辑)


5 现在重新编译libcocos2dx,如果报“无法更新程序数据库”错误,如下:
修改项目属性 右击项目 --> "属性”
1. “C/C++” --> "常规” -->”调试信息格式” 设置为 “C7 兼容(/Z7)”
2. “C/C++” --> "代码生成” -->”启用字符串池” 设置为 “是(/GF)”
3. “链接器” --> "调试” -->”生成调试信息” 设置为 “是(/DEBUG)”

6 在需要捕获窗口事件的层,可以使用如下代码:
#if (CC_TARGET_PLATFORM CC_PLATFORM_WIN32)
CCDirector::sharedDirector()->getOpenGLView()->setWin32WindowHandle(this);
#endif
并实现windowProc方法


7 退出层时,不要忘了
#if (CC_TARGET_PLATFORM CC_PLATFORM_WIN32)
CCDirector::sharedDirector()->getOpenGLView()->setWin32WindowHandle(NULL);
#endif


原创粉丝点击