2013년 12월 19일 목요일

C++ 한글 체크

할글은 2byte가 한글자를 이루며 각 byte의 최상위 bit가 1이다.

때문에 다음과 같이 한글여부를 확인 할 수 있다.

  1. const char* text = "한국";
  2.  
  3. (text[0] & 0x80) == 1 // 한글
  4. (text[0] & 0x80) != 1 // 한글아님



예:
  1. bool isHangul(const char *text)
  2. {
  3. bool hangul = true;
  4. for (int i = 0; i < strlen(text); i++)
  5. {
  6. if ((text[i] & 0x80) != 0x80)
  7. {
  8. hangul = false;
  9. }
  10. }
  11. return hangul;
  12. }

Cocos2d-x에서 EditBox사용하기



1. EditBox사용할 Layer의 Head를 다음과 같이 설정한다.


  1. #ifndef __ProjectName__MemberLayer__
  2. #define __ProjectName__MemberLayer__
  3.  
  4. #include "Common.h"
  5. #include "cocos-ext.h" // EditBox사용을 위한 추가
  6.  
  7. USING_NS_CC_EXT; // EditBox사용을 위한 추가
  8.  
  9. // CCEditBoxDelegate 추가
  10. class MemberLayer:public CCLayer, public CCEditBoxDelegate
  11. {
  12. public:
  13. virtual bool init();
  14. static CCScene* scene();
  15. CREATE_FUNC(MemberLayer);
  16. ///////////////////////////////////////////////////////////////
  17. // EditBox사용을 위한 추가 시작
  18. ///////////////////////////////////////////////////////////////
  19. virtual void editBoxEditingDidBegin(CCEditBox* editBox);
  20. virtual void editBoxEditingDidEnd(CCEditBox* editBox);
  21. virtual void editBoxTextChanged(CCEditBox* editBox, const std::string& text);
  22. virtual void editBoxReturn(CCEditBox* editBox);
  23. ///////////////////////////////////////////////////////////////
  24. // EditBox사용을 위한 추가 끝
  25. ///////////////////////////////////////////////////////////////
  26. private:
  27. void PrepareResources();// 본 페이지에서 사용할 리소스 로드
  28. void StartLayout(); // 전체 레이아웃 구성
  29. void PrepareEditBox(); // 이름, 생년월일, 비밀번호 입력 텍스트박스 생성
  30. CCSpriteBatchNode* batchNode;
  31. CCEditBox* Name; // 이름을 입력할 텍스트박스
  32. CCEditBox* Birth; // 생년월일을 입력할 텍스트박스
  33. CCEditBox* Pwd; // 비밀번호를 입력할 텍스트박스
  34. };
  35.  
  36. #endif /* defined(__ProjectName__MemberLayer__) */

2. cpp 파일

  1. #pragma mark -
  2. #pragma mark EditBox
  3. void MemberLayer::PrepareEditBox()
  4. {
  5. /*****************************************************************
  6. * 이름 필드
  7. ****************************************************************/
  8. Name = CCEditBox::create(CCSizeMake(300, 50), CCScale9Sprite::createWithSpriteFrameName("editBox_bg_normal.png"));
  9. Name->setPosition(Common::centerPoint());
  10. Name->setFontColor(ccRED);
  11. Name->setPlaceHolder("Name");
  12. Name->setPlaceholderFontColor(ccWHITE);
  13. Name->setReturnType(kKeyboardReturnTypeDefault);
  14. Name->setInputMode(kEditBoxInputModeAny);
  15. Name->setTag(1);
  16. Name->setDelegate(this);
  17. this->addChild(Name);
  18. /*****************************************************************
  19. * 생년월일 필드
  20. ****************************************************************/
  21. Birth = CCEditBox::create(CCSizeMake(300, 50), CCScale9Sprite::createWithSpriteFrameName("editBox_bg_complete.png"));
  22. Birth->setPosition(ccpAdd(Name->getPosition(), ccp(0, 100)));
  23. Birth->setFontColor(ccRED);
  24. Birth->setInputMode(kEditBoxInputModePhoneNumber);
  25. Birth->setDelegate(this);
  26. this->addChild(Birth);
  27. /*****************************************************************
  28. * 비밀번호 필드
  29. ****************************************************************/
  30. Pwd = CCEditBox::create(CCSizeMake(300, 50), CCScale9Sprite::createWithSpriteFrameName("editBox_bg_error.png"));
  31. Pwd->setPosition(ccpAdd(Birth->getPosition(), ccp(0, 100)));
  32. Pwd->setFontColor(ccRED);
  33. Pwd->setInputMode(kEditBoxInputModePhoneNumber);
  34. Pwd->setTag(3);
  35. Pwd->setReturnType(kKeyboardReturnTypeDone);
  36. Pwd->setInputFlag(kEditBoxInputFlagPassword);
  37. Pwd->setDelegate(this);
  38. this->addChild(Pwd);
  39. }
  40.  
  41.  
  42. #pragma mark -
  43. #pragma mark EditBox Virtual Methods
  44. void MemberLayer::editBoxEditingDidBegin(cocos2d::extension::CCEditBox *editBox)
  45. {
  46. // EditBox편집이 시작될 때 발생하는 이벤트
  47. }
  48. void MemberLayer::editBoxEditingDidEnd(cocos2d::extension::CCEditBox *editBox)
  49. {
  50. // EditBox편집이 끝날 때 발생하는 이벤트
  51. }
  52. void MemberLayer::editBoxTextChanged(cocos2d::extension::CCEditBox *editBox, const std::string &text)
  53. {
  54. // EditBox내 Text가 변경될 때 발생하는 이벤트
  55. }
  56. void MemberLayer::editBoxReturn(cocos2d::extension::CCEditBox *editBox){}

EditBoxInputMode (EX) setInputMode(kEditBoxInputModeAny))

  1. kEditBoxInputModeAny = 0,
  2. kEditBoxInputModeEmailAddr,
  3. kEditBoxInputModeNumeric,
  4. kEditBoxInputModePhoneNumber,
  5. kEditBoxInputModeUrl,
  6. kEditBoxInputModeDecimal,
  7. kEditBoxInputModeSingleLine


EditBoxInputFlagType (EX) setInputFlag(kEditBoxInputFlagPassword))

  1. kEditBoxInputFlagPassword = 0,
  2. kEditBoxInputFlagSensitive,
  3. kEditBoxInputFlagInitialCapsWord,
  4. kEditBoxInputFlagInitialCapsSentence,
  5. kEditBoxInputFlagInitialAllCharacters

KeyboardReturnType (EX) setReturnType(kKeyboardReturnTypeSend))

  1. kKeyboardReturnTypeDefault = 0,
  2. kKeyboardReturnTypeDone,
  3. kKeyboardReturnTypeSend,
  4. kKeyboardReturnTypeSearch,
  5. kKeyboardReturnTypeGo