发布网友 发布时间:2022-04-24 14:04
共1个回答
热心网友 时间:2022-04-12 20:32
聊天输入框 (单行输入框 ,多行可自己扩展)实现功能:1.普通输入2.设置输入框显示最大宽度(PT值,cocos2d-x坐标值)3.设置输入框允许的最大字符数量(字符Unicode)4.输入框自动缩进(当输入字符串数量超过显示框最大宽度时,会自动向左缩进,显示最新字符串输入框实现代码头文件:#ifndef CursorInputDemo_CursorTextField_h#define CursorInputDemo_CursorTextField_h#include "cocos2d.h"USING_NS_CC;class CursorTextField: public CCTextFieldTTF, public CCTextFieldDelegate, public CCTouchDelegate{private: // 点击开始位置 CCPoint m_beginPos; // 光标精灵 CCSprite *m_pCursorSprite; // 光标动画 CCAction *m_pCursorAction; // 光标坐标 CCPoint m_cursorPos; //输入框长度 float inputFrameWidth; //允许输入的最大字符数Unicode float inputMaxLength; int nLenCount; int* codeNumType; //每个字符对应的字节数量 int codeCur; //当前第几个字符 int startCur; //行开头字符下标 int endCur; //行末尾下标 // 输入框总内容 std::string *m_pInputText; std::string inpuText; //当前输入框内容public: CursorTextField(); ~CursorTextField(); // static static CursorTextField* textFieldWithPlaceHolder(const char *placeholder, const char *fontName, float fontSize); // CCLayer void onEnter(); void onExit(); bool init(); // 初始化光标精灵 void initCursorSprite(int nHeight); // CCTextFieldDelegate virtual bool onTextFieldAttachWithIME(CCTextFieldTTF *pSender); virtual bool onTextFieldDetachWithIME(CCTextFieldTTF * pSender); virtual bool onTextFieldInsertText(CCTextFieldTTF * pSender, const char * text, int nLen); virtual bool onTextFieldDeleteBackward(CCTextFieldTTF * pSender, const char * delText, int nLen); // CCLayer Touch bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); // 判断是否点击在TextField处 bool isInTextField(CCTouch *pTouch); // 得到TextField矩形 CCRect getRect(); // 打开输入法 void openIME(); // 关闭输入法 void closeIME(); const char* getInputText(); void setInpuntText(char* text); void setInputWidth(float width); void setInputMaxLength(float length); int Utf82Unicode(LPWSTR out, int outsize , LPSTR in,int insize);};#endif