用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