/* ========================================================================== * ÆÄ ÀÏ : UIIMENode.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ±è°¡¶÷ * ÀÛ ¼º ÀÏ : 2006-10-31 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #pragma comment(lib, "imm32.lib") #include "UINode.h" const int MAX_TEXT_LENGTH = 512; /// ¿¡µðÆ® Á¾·ù enum eEditKind { eEDIT_NORMAL, /// ÀÏ¹Ý eEDIT_NOINPUT, /// ÀԷ¸¸ ¾È¹ÞÀ½. eEDIT_NUMBER, /// ¼ýÀÚ¿ë eEDIT_ACCOUNT_ID, /// ID °èÁ¤¿ë eEDIT_ACCOUNT_PASS, /// PASS °èÁ¤¿ë eEDIT_EXCEPT_SPECIAL /// Ư¼ö¹®ÀÚ¸¸ Á¦¿Ü }; class cUIIMENode : public cUINode { public: cUIIMENode( eUINodeType type ); virtual ~cUIIMENode(); /// ÅØ½ºÆ®¸¦ ¾ò´Â´Ù LPCTSTR GetText(); /// ÅØ½ºÆ® ±æÀÌ È¹µæ int GetLength(); /// ÇöÀç ÅØ½ºÆ®¸¦ ÀÔ·ÂÁßÀ̰ųª, ÅØ½ºÆ®°¡ ÀԷµǾîÀÖ´ÂÁö °Ë»ç bool IsEdit(); /// ÅØ½ºÆ®¸¦ ÃʱâÈ­ÇÑ´Ù void Clear(); void SetFocus(); /// ¿¡µðÆ® ÀÚü¿¡ ÃÖ´ë µé¾î°¥¼ö ÀÖ´Â ¹®ÀÚ¿­ ±æÀÌ void SetMaxEditLength( int maxlen ); bool IsComposition() { return mCompFlag; } protected: virtual bool OnCreate( cUINodeProperty* property = 0 ); /// ¿µ¹® ÀԷ½à ó¸® virtual void OnChar( unsigned int wparam ); virtual void OnImeNotify( unsigned int wparam ); virtual void OnImeComposition( unsigned int wparam, unsigned int lparam ); virtual void OnImeEndComposition( unsigned int wparam, unsigned int lparam ); /// Ű ´Ù¿î ½Ã ó¸® virtual void OnKeyDown( eKeyCode code ); /// ÀԷ¹ÞÀº ¹®ÀÚ°¡ À¯È¿ÇÑÁö °Ë»ç virtual bool IsValid( TCHAR c ); /// ÅØ½ºÆ®ÀÇ ¾²·¹±â °ªÀ» ¾ø¾Ø´Ù. void ClearText( int index ); /// 1 byte ¹®ÀÚ »ðÀÔ void AddChar( LPTSTR word ); /// Á¶ÇÕÁßÀÎ ÇÑ±Û »ðÀÔ void AddCompWord( LPTSTR word, int len ); /// ¹®ÀÚ¿­¿¡ ±âÈ£µîÀÌ °°ÀÌ »ðÀÔ‰çÀ» °æ¿ì ó¸®ÇÏ´Â ÇÔ¼ö void AddString( LPTSTR string, int len ); /// ij·µÀ» Áß½ÉÀ¸·Î ¿À¸¥ÂÊ ¹®ÀÚ¿­À» ¾ò´Â´Ù int GetRightString( LPTSTR dest, unsigned int maxDestLen ); /// ij·µÀ» ¹®ÀÚ¿­ óÀ½À¸·Î ¿Å±ä´Ù void CaretMoveHome(); /// ij·µÀ» ¹®ÀÚ¿­ ³¡À¸·Î ¿Å±ä´Ù void CaretMoveEnd(); /// ij·µÀ» ¿ÞÂÊÀ¸·Î ÇÑ ÀÚ ¿Å±ä´Ù. (¼öÁ¤) 0226 ¿õÁÖ: ¼ýÀÚ ÀÔ·Â ½Ã ½°Ç¥¸¦ ³Ñ±â±â À§ÇØ ¿À¹ö¶óÀ̵ù virtual void CaretMoveLeft(); /// ij·µÀ» ¿À¸¥ÂÊÀ¸·Î ÇÑ ÀÚ ¿Å±ä´Ù. (¼öÁ¤) 0226 ¿õÁÖ: ¼ýÀÚ ÀÔ·Â ½Ã ½°Ç¥¸¦ ³Ñ±â±â À§ÇØ ¿À¹ö¶óÀ̵ù virtual void CaretMoveRight(); /// ¹é½ºÆäÀ̽º Ű ´©¸§, (¼öÁ¤) 0226 ¿õÁÖ: ¼ýÀÚ ÀÔ·Â ½Ã ½°Ç¥¸¦ ³Ñ±â±â À§ÇØ ¿À¹ö¶óÀ̵ù virtual void KeyDownBackSpace(); /// Delete Ű ´©¸§. (¼öÁ¤) 0226 ¿õÁÖ: ¼ýÀÚ ÀÔ·Â ½Ã ½°Ç¥¸¦ ³Ñ±â±â À§ÇØ ¿À¹ö¶óÀ̵ù virtual void KeyDownDelete(); /// ÇÑÁÙ¿¡ µé¾î°¥¼ö ÀÖ´Â ¹®ÀÚ¼ö ¼¼ÆÃ void SetOneLineWidth( int linelen ); /// ctrl + c ´©¸§ void KeyDownCopy(); /// ctrl + v ´©¸§ void KeyDownPaste(); /// µå·¡±× ¿µ¿ªÀÌ ÀÖ´Â »óÅ¿¡¼­ backspace ´Ù¿î ȤÀº delete key ´Ù¿î void DeleteSell(); private: /// ÇÚµé static HWND mHWnd; public: /// shift key static bool mShiftKey; /// ÄÁÆ®·Ñ ۰¡ ´­·Ç´ÂÁö ÀúÀå static bool mControlKey; protected: /// ¿¡µðÆ®¹Ú½º°¡ °¡Áø °íÀ¯ÀÇ ¹®ÀÚ¿­ /// À¯´ÏÄÚµå ¹öÀü : 2byte ¹®Àڹ迭, ±æÀÌ´Â 1 TCHAR mText[ MAX_TEXT_LENGTH ]; // Á¶¸³Áß cStringT mCompText; /// ¿¡µðÆ® SHOW ÅØ½ºÆ® °»½Å¿©ºÎ bool mChangeText; /// ¿¡µðÆ®¹Ú½º°¡ °¡Áø °íÀ¯ÀÇ ¹®ÀÚ¿­ ±æÀÌ ( byte ) int mTextLength; /// °íÀ¯ ¹®ÀÚ¿­»óÀÇ Ä³·µ int mTextCaretX; /// Á¶ÇÕÁßÀÓ bool mCompFlag; /// º¸Á¤Ç÷¡±× bool mFixFlag; /// ½ºÅ©·Ñ±â´ÉÀ» À§ÇÑ À妽º( È­¸é¿¡ »Ñ¸± ÅØ½ºÆ®ÀÇ ½ÃÀÛÀ妽º) int mScrollIndex; /// ½ºÅ©·ÑÀ» À§ÇÑ Ä³·µ( È­¸é»ó¿¡ ÂïÈ÷´Â ij·µ ) int mScrollCaretX; /// ÇÑÁÙ¿¡ µé¾î°¥¼ö ÀÖ´Â ÃÖ´ë ¹®ÀÚ Æø int mOneLineWidth; /// ¿¡µðÆ®¿¡ µé¾î°¥¼ö ÀÖ´Â ÃÖ´ë ±ÛÀÚ ¹ÙÀÌÆ® ¼ö int mMaxEditLength; /// µå·¡±× ½ÃÀÇ Ä³·µÁÂÇ¥ int mStartDragCaretX, mEndDragCaretX; /// µå·¡±ë Ç÷¡±× bool mDraggingFlag; bool mImeFlag; /// ¿¡µðÆ® Á¾·ù eEditKind mEditKind; }; inline LPCTSTR cUIIMENode::GetText() { return mText; } inline void cUIIMENode::SetOneLineWidth( int linelen ) { mOneLineWidth = linelen; } inline void cUIIMENode::SetMaxEditLength( int maxlen ) { mMaxEditLength = maxlen; } inline int cUIIMENode::GetLength() { return mTextLength; } inline bool cUIIMENode::IsEdit() { if( mTextLength > 0 || mCompFlag ) return true; return false; }