cocos2d-x在win32测试时响应键盘消息

转载 2013年12月11日 22:01:14

注:前面部分在网上找的,还不错,后面的细节需要自己注意。


cocos2d主要面向的是触摸屏幕设备的,在WINDOWS下的定位感觉多多少少就是相当于一个模拟器,因此并没有太多的PC下重要的键盘支持。然而响应键盘消息对于调试来说可以提供不少方便。下边就通过更改cocos2d-x的源码来添加键盘消息响应。

一,打开/cocos2dx/include/CCLayer.h

在CCLayer类的public下添加

virtual void processWin32KeyPress(UINT message, WPARAM wParam, LPARAM lParam) {}

二,打开/cocos2dx/platform/win32/CCEGLView_win32.h

在CCEGLView类的定义上边声明

class CCLayer;

在CCEGLView类的private下添加变量

CCLayer *m_pLayWin32Key;

在public下添加函数

void SetWin32KeyLayer(CCLayer *pLayer){       m_pLayWin32Key = pLayer;}

三,打开/cocos2dx/platform/win32/CCEGLView_win32.cpp

在文件开始部分添加

#include "CCLayer.h"

在CCEGLView构造函数中初始化CCLayer(NULL)

在WindowProc函数的开始部分添加

if(NULL != m_pLayWin32Key){    m_pLayWin32Key->processWin32KeyPress(message, wParam, lParam);}

四,重新生成libcocos2d将新生成的libcocos2d.lib和libcocos2d.dll放到相应位置

 

 

这样就可以在自己的程序中捕获win32的消息了。只需要在某个Layer的初始化部分添加

CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(this);

然后重新继承虚函数processWin32KeyPress,就可以处理消息了。当然在Layer销毁前别忘记调用

CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(NULL);

 

4)
使用方法HelloWorldScene.h文件)中增加成员函数
 

virtual void processWin32KeyPress(UINT message, WPARAM wParam, LPARAMlParam);

 

HelloWorldScene.ccp中,增加

void HelloWorld::processWin32KeyPress(UINT message, WPARAM wParam, LPARAM lParam)

{

//此处与其他win32程序类似,如下

switch(message)

  {

  caseWM_KEYDOWN:

    {

      switch(wParam)

      {

      caseVK_UP:

        MessageBox(NULL,L"up",L"test",MB_OK);

        break;

      caseVK_LEFT:

        MessageBox(NULL,L"left",L"test",MB_OK);

        break;

      caseVK_RIGHT:

        MessageBox(NULL,L"right",L"test",MB_OK);

        break;

      caseVK_DOWN:

        MessageBox(NULL,L"down",L"test",MB_OK);

        break;

      }

    }

  }

}

同时在HelloWorld::scene()函数中增加(否则没响应)

CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(this);

 

 在结束图层Layer时调用(否则会崩)

CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer(NULL);

Windows键盘消息处理

文大部分来自MSDN和网友的博客,我在实践的基础上再作了一些总结。 1. 虚拟键(VK_*) 键盘上每一个键对应一个扫描码,扫描码是OEM厂商制定的,不同的厂商生产的键盘同样一个按键的扫描...
  • leehong2005
  • leehong2005
  • 2013-02-26 11:52:37
  • 9427

[Win32]键盘消息

1. 为Sysmets3程序添加击键消息:     1) 主要是添加了Page Up、Page Down、
  • Lirx_Tech
  • Lirx_Tech
  • 2014-10-28 14:42:02
  • 1824

win32 sdk 对话框上的编辑框控件响应事件

整理一下,希望对有用的同学有所帮助。 //编辑控件消息处理 LONG OldProc; LRESULT CALLBACK EditProc( HWND hWnd, UINT message, WPAR...
  • zhang__bing
  • zhang__bing
  • 2012-01-23 09:48:05
  • 2318

原谅我今天才学会使用win32的按键消息处理!

之前一直写directX的程序,用到的win32消息并不多,而且大部分的按键捕获都是有directInput完成的,因为能捕获到手柄那样的按键(而且据说还是实时的消息捕获)。。。 今天当我想...
  • zengraoli
  • zengraoli
  • 2013-04-18 10:19:00
  • 2826

代码赏析:子窗口对于键盘和鼠标的响应

一、引言首先声明,代码并不是我写的;其次,代码是我在小甲鱼的《Win32 SDK程序设计》系列教程的第41讲中看到的。因为本人一方面在学习这个教程,一方面也对于优美的代码有着自己的独特的爱好,所以在这...
  • u012814856
  • u012814856
  • 2017-04-17 00:12:26
  • 573

[Win32]Win32 SDK编程系列文章——键盘输入消息

理论 因为大多数的PC只有一个键盘,所以所有运行中的WINDOWS程序必须共用它。WINDOWS 将负责把击键消息送到具有输入焦点的那个应用程序中去。尽管屏幕上可能同时有几个应用程序窗口,但一个...
  • ouyangshima
  • ouyangshima
  • 2013-06-05 17:21:16
  • 1708

win32关于对话框处理不到WM_KEYDOWN消息的解决办法(注:非MFC)

最近碰到一个问题,就是自己DialogBox创建的对话框处理不到WM_KEYDOWN消息,很奇怪!网上看了好多些解答,但是大多数都是说用MFC的PreTranslateMessage来处理,这个对于w...
  • cjmscofiled
  • cjmscofiled
  • 2014-02-14 10:23:37
  • 1041

MFC——12.话框中对键盘消息的响应处理&&如何响应wm_char消息

本文为转载文章,讲解了如何解决在对话框对应的类里添加消息响应函数的方法。...
  • u010757264
  • u010757264
  • 2016-04-17 12:22:42
  • 1025

键盘消息处理(按下某个键,响应一个函数)

可以利用PreTranslateMessage(MSG* pMsg) 函数来对键盘消息进行处理 例如:
  • foreverhuylee
  • foreverhuylee
  • 2014-07-17 17:15:07
  • 3101

Windows应用程序对键盘与鼠标的响应总结

键盘: 1、键盘上每一个有意义的键都对应着一个唯一的标识值,称为扫描码。2、WINDOWS 系统定义的与设备无关的键的标识,称为虚拟码。虚拟码是;一种与设备无关的键盘编码,它的值存放在键盘消息的wPa...
  • lin_angle
  • lin_angle
  • 2007-09-20 00:11:00
  • 2197
收藏助手
不良信息举报
您举报文章:cocos2d-x在win32测试时响应键盘消息
举报原因:
原因补充:

(最多只允许输入30个字)