上一篇我们配置了运行环境,但是并不完美,MFC窗口 和 cosos2d 窗口是分开运行的。 如果用来做工具 看起来不太好看,这一篇我们将修改cocos2d 代码,让其运行在MFC控件上
参考:http://blog.csdn.net/akof1314/article/details/8133800
要把cocos2d 窗口运行在 MFC 控件上, 我们就要找到这个窗口的句柄,下面我们来一步步找,看看怎样得到这个窗口句柄
1.首先我们来分析cocos2d的运行机制
打开cocos2d::Application::getInstance()->run(); run()函数的源码:
- int@H_301_31@Application::run()@H_301_31@@H_301_31@
- {@H_301_31@
- PVRFrameEnableControlWindow(false@H_301_31@);@H_301_31@@H_301_31@
- @H_301_31@
- //Mainmessageloop:@H_301_31@@H_301_31@@H_301_31@
- LARGE_INTEGERnFreq;@H_301_31@
- LARGE_INTEGERnLast;@H_301_31@
- LARGE_INTEGERnNow;@H_301_31@
- @H_301_31@
- QueryPerformanceFrequency(&nFreq);@H_301_31@
- QueryPerformanceCounter(&nLast);@H_301_31@
- //这里调用了AppDelegate中的<spanstyle="font-family:Arial,sans-serif;">applicationDidFinishLaunching()@H_301_31@@H_301_31@@H_301_31@
- //Initializeinstanceandcocos2d.@H_301_31@@H_301_31@@H_301_31@
- if@H_301_31@(!applicationDidFinishLaunching())@H_301_31@@H_301_31@
- return@H_301_31@0;@H_301_31@@H_301_31@
- }@H_301_31@
- //那么游戏窗口一定是在这之前创建的</span>@H_301_31@@H_301_31@@H_301_31@
- autodirector=Director::getInstance();@H_301_31@
- autoglview=director->getOpenGLView();@H_301_31@
- //Retainglviewtoavoidglviewbeingreleasedinthewhileloop@H_301_31@@H_301_31@@H_301_31@
- glview->retain();@H_301_31@
- //下面是游戏主循环</span>@H_301_31@@H_301_31@@H_301_31@
- while@H_301_31@(!glview->windowShouldClose())@H_301_31@@H_301_31@
- {@H_301_31@
- QueryPerformanceCounter(&nNow);@H_301_31@
- if@H_301_31@(nNow.QuadPart-nLast.QuadPart>_animationInterval.QuadPart)@H_301_31@@H_301_31@
- nLast.QuadPart=nNow.QuadPart;@H_301_31@
- director->mainLoop();@H_301_31@
- glview->pollEvents();@H_301_31@
- }@H_301_31@
- else@H_301_31@@H_301_31@@H_301_31@
- Sleep(0);@H_301_31@
- //Directorshouldstilldoacleanupifthewindowwasclosedmanually.@H_301_31@@H_301_31@@H_301_31@
- if@H_301_31@(glview->isOpenGLReady())@H_301_31@@H_301_31@
- director->end();@H_301_31@
- director->mainLoop();@H_301_31@
- director=nullptr;@H_301_31@
- glview->release();@H_301_31@
- return@H_301_31@@H_301_31@true@H_301_31@;@H_301_31@@H_301_31@
- }@H_301_31@