CCKeypadDispatcher(键盘消息分发器 该类主要负责键盘消息的分发,分发到已经注册过的层、精灵等对象(注册了CCKeypadDelegate委托)。)

手机键盘消息分发器
本文介绍了一个用于分发手机键盘消息的C++类CCKeypadDispatcher,该类能够处理回退键(kTypeBackClicked)和菜单键(kTypeMenuClicked)的点击事件,并将这些事件分发给注册过的委托对象。


#ifndef __CCKEYPAD_DISPATCHER_H__

#define __CCKEYPAD_DISPATCHER_H__


#include "CCKeypadDelegate.h"

#include "cocoa/CCArray.h"


NS_CC_BEGIN


typedef enum {

    // the back key clicked msg

    kTypeBackClicked = 1,

    kTypeMenuClicked,

} ccKeypadMSGType;


struct _ccCArray;

/**

@class CCKeypadDispatcher

@brief Dispatch the keypad message from the phone//分发手机的键盘消息

*/

class CC_DLLCCKeypadDispatcher : public CCObject

{

public:

    CCKeypadDispatcher();

    ~CCKeypadDispatcher();


    voidaddDelegate(CCKeypadDelegate* pDelegate);//增加回调键盘消息方法


    voidremoveDelegate(CCKeypadDelegate* pDelegate); //移除回调键盘消息方法


    voidforceAddDelegate(CCKeypadDelegate* pDelegate);//force 强迫


    voidforceRemoveDelegate(CCKeypadDelegate* pDelegate);


    booldispatchKeypadMSG(ccKeypadMSGType nMsgType);//分发键盘消息 参数是键盘消息类型 包括kTypeBackClicked  kTypeMenuClicked

{

    CCKeypadHandler*  pHandler = NULL;

    CCKeypadDelegate* pDelegate = NULL;


    m_bLocked = true;


    if (m_pDelegates->count() > 0)

    {

        CCObject* pObj = NULL;

        CCARRAY_FOREACH(m_pDelegates, pObj)

        {

            CC_BREAK_IF(!pObj);


            pHandler = (CCKeypadHandler*)pObj;

            pDelegate = pHandler->getDelegate();


            switch (nMsgType)

            {

            case kTypeBackClicked:

                pDelegate->keyBackClicked();

                break;

            case kTypeMenuClicked:

                pDelegate->keyMenuClicked();

                break;

            default:

                break;

            }

        }

    }


    m_bLocked = false;

    if (m_bToRemove)

    {

        m_bToRemove = false;

        for (unsigned int i = 0; i < m_pHandlersToRemove->num; ++i)

        {

            forceRemoveDelegate((CCKeypadDelegate*)m_pHandlersToRemove->arr[i]);

        }

        ccCArrayRemoveAllValues(m_pHandlersToRemove);

    }


    if (m_bToAdd)

    {

        m_bToAdd = false;

        for (unsigned int i = 0; i < m_pHandlersToAdd->num; ++i)

        {

            forceAddDelegate((CCKeypadDelegate*)m_pHandlersToAdd->arr[i]);

        }

        ccCArrayRemoveAllValues(m_pHandlersToAdd);

    }


    return true;

}

protected:


    CCArray* m_pDelegates; //消息回调委托 数组

    bool m_bLocked;

    bool m_bToAdd;

    bool m_bToRemove;


    struct _ccCArray *m_pHandlersToAdd;

    struct _ccCArray *m_pHandlersToRemove;

};


NS_CC_END


#endif //__CCKEYPAD_DISPATCHER_H__


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值