#pragma once #include "EtUIDialogInfo.h" #include "EtUIControlProperty.h" #include "EtUIDialogBase.h" #include "LostDeviceProcess.h" #include "EtUITemplate.h" #define UI_FILE_STRING "Eternity Engine UI File 0.3" #define UI_HEADER_RESERVED ( 1024 - sizeof( SUIFileHeader ) ) #define UI_FILE_VERSION_01 0x0101 #define UI_FILE_VERSION 0x0102 #define PRE_FIX_COMBOBOX_ELLIPSIS struct SUIFileHeader { char szHeaderString[ 256 ]; int nVersion; int nTemplateCount; int nControlCount; int nFontCount; SUIFileHeader() { ZeroMemory( this, sizeof(SUIFileHeader) ); strcpy_s( szHeaderString, sizeof(szHeaderString), UI_FILE_STRING ); nVersion = UI_FILE_VERSION; } }; class CEtUIControl; class CEtUITemplate; struct SUIElement; class CEtUIDialog; class CEtUICallback { public: CEtUICallback() {} ~CEtUICallback() {} public: virtual void OnUICallbackProc( int nID, UINT nCommand, CEtUIControl *pControl, UINT uiMsg = 0 ) {} }; class CEtUIDialog : public CEtUIDialogBase { public: CEtUIDialog( UI_DIALOG_TYPE dialogType = UI_TYPE_FOCUS, CEtUIDialog *pParentDialog = NULL, int nID = -1, CEtUICallback *pCallback = NULL, bool bAutoCursor = false ); virtual ~CEtUIDialog(void); enum FadeModeEnum { None, AllowRender, CancelRender, }; protected: bool m_bShow; bool m_bAcceptInputMsgWhenHide; // show »óÅ´ø ¾Æ´Ï´ø ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¼ö ÀÖ°Ô ÇØÁÖ´Â Ç÷¡±×. ¿«¿©ÀÖ´Â ´ÙÀ̾ó·Î±×¸¦ hide ½ÃŰ°í µû·Î ·»´õ¸µÇÏ´Â ½ºÅ³Æ®¸®¿¡¼­ ¸Þ½ÃÁö ó¸®Çϱâ À§ÇØ »ç¿ëÇÔ. HWND m_hWnd; std::vector< CEtUIControl * > m_vecControl; std::vector< CEtUITemplate * > m_vecUITemplate; std::vector< SUIElement > m_vecDlgFrameElement; std::vector< SUICoord > m_vecDlgFrameCoord; EtTextureHandle m_hTexture; EtTextureHandle m_hDlgTexture; CEtUIControl *m_pDefaultControl; std::vector< CEtUIControl* > m_TempControlList; int m_nDialogID; CEtUICallback *m_pCallback; SUIDialogInfo m_DlgInfo; float m_fScreenWidth; float m_fScreenWidthRatio; float m_fScreenWidthBorder; float m_fScreenHeight; float m_fScreenHeightRatio; float m_fScreenHeightBorder; std::string m_strCmdControlName; // Note : ProcessCommand¾È¿¡¼­ »ç¿ëµÉ ÄÁÆ®·Ñ À̸§ SUIColorEx m_renderDlgColor; bool m_bFadeOut; FadeModeEnum m_FadeMode; bool m_bMouseInDialog; bool m_bEndInitialize; float m_fMouseX; float m_fMouseY; SHORT m_HotKeyState; int m_nHotKey; CEtUIDialog *m_pParentDialog; // Note : ÀÚ½ÅÀÇ ºÎ¸ð À©µµ¿ì. std::list m_listChildDialog; // Note : ÀÚ½Ä À©µµ¿ìµé. std::list m_listChildModalDialog; // Note : ÀÚ½ÄÀε¥ ¸ð´Þ·Î »ý¼ºµÈ À©µµ¿ìµé. std::string m_strDialogFileName; SUICoord m_BaseDlgCoord; bool m_bPassMessageToChild; bool m_bShowModal; bool m_bAutoCursor; bool m_bCursor; // ¸®½ºÆ®¹Ú½º ¾ÆÀÌÅÛÀ̳ª, ¿¤¸®¸ÕÆ® ¾ÆÀÌÅÛÀÏ °æ¿ì ÀÏ¹Ý ´ÙÀ̾ó·Î±×¿Í ±¸ºÐÀ» À§ÇØ Ã¼Å©¸¦ ÇØµÓ´Ï´Ù. bool m_bElementDialog; bool m_bElementDialogShowState; std::map< std::string, CEtUIDialog*> m_cachedControls; std::vector< std::pair > m_vecChildRenderPriorityInfo; public: // ¸¶ÄÏ´ÙÀ̾ó·Î±×ÀÇ °­Á¦½ºÄÉÀ϶§¹®¿¡ ¿¡µðÆ®¹Ú½º ij·µÀÌ ¾È¸Â´Â ¹®Á¦°¡ ¹ß»ýÇß½À´Ï´Ù. // ¾î¿ ¼ö ¾ø´Â °æ¿ì »©°í´Â ÃÖ´ëÇÑ ´Ù¸¥ °÷¿¡¼­´Â »ç¿ëÇÏÁö ¸»¾ÆÁÖ¼¼¿ä. // // ±âÁ¸ÀÇ °­Á¦½ºÄÉÀÏ ¹æ½ÄÀÇ ´ÜÁ¡Àº, // FontMng¿Í ¿¬µ¿µÇÁö ¾Ê¾Æ ¸¶¿ì½º µå·¡±× ¹× ·»´õ¸µ¿¡ º°µµÃ³¸®¸¦ ÇØÁà¾ßÇÑ´Ù. // ¾îÂ÷ÇÇ º¸¿©Áú ´ÙÀ̾ó·Î±×(¸¶ÄÏ,Àκ¥,ÅøÆÁ)¿¡ ´ëÇØ ½ºÄÉÀÏÀ» ¼ÂÆÃÇÏ´Â ¹æ½ÄÀ̶ó¸é s_fDialogScaleÀ» °Çµå¸®´Â°Ô ³´´Ù. // À̹ǷÎ, s_fDialogScale°ªÀ» °­Á¦·Î ¹Ù²Ù´Â ¹æ½ÄÀ¸·Î º¯°æÇÏ°Ô µÇ¾ú½À´Ï´Ù. static void SetForceDialogScale( float fScale ); public: static float s_fScreenMouseX; static float s_fScreenMouseY; protected: // Note : ¾Æ·¡´Â ÅøÆÁ¿¡ °ü·ÃµÈ ½ºÅÂÆ½ º¯¼öµé. Áö±ÝÀº ÅøÆÁÀÌ Çѹø¿¡ Çϳª¸¸ Ãâ·ÂµÇ´Â ±¸Á¶ÀÌ´Ù. // ÇÏÁö¸¸ ÀÌ·± ±¸Á¶´Â º°·Î À¯¿¬ÇÏÁö ¸øÇѵí ÇÏ´Ù. ³ªÁß¿¡´Â ½ºÅÂÆ½ÀÌ ¾Æ´Ï¶ó ´ÙÀ̾ó·Î±×¸¶´Ù // ÀÌ º¯¼öµé°ú ÇÔ¼ö¸¦ °¡Áö´Â°Ô ÁÁ°Ú´Ù. // static int s_nTooltipStringIndex; static std::wstring s_strTooltipString; static CEtUIDialog *s_pTooltipDlg; static float s_fDialogScale; static float s_fDialogScaleValueVert; static float s_fDialogScaleValueHori; static float s_fMinDialogScale; static float s_fMaxDialogScale; static int s_nUISize; static void (_stdcall *s_pAutoCursorPtr)( bool bShow ); static int s_nDialogTextureSize; float m_fLastShowDelta; bool m_bLoadedTexture; public: static CEtUIControl *s_pMouseEnterControl; static void ReleaseMouseEnterControl(); static void SetMouseEnterControl( CEtUIControl *pControl ); static void SetAutoCursorCallback( void (_stdcall *pFunc)( bool bShow ) ) { s_pAutoCursorPtr = pFunc; } // FadeForBlow´Â UI¼û±ä »óÅ¿¡¼­·Î ·»´õÇØ¾ßÇÑ´Ù°í ÇÑ´Ù. ÇÒ¼ö¾øÀÌ »óÀ§´ÜÀ¸·Î »«´Ù. static CEtUIDialog *s_pFadeDlg; public: void AddChildDialog( CEtUIDialog *pDialog ); void AddChildModalDialog( CEtUIDialog *pDialog ); void SetChildRenderPriority(CEtUIDialog* pDlg, bool bTail); void RefreshChildRenderPriority(); protected: // EtUIListBoxEx°¡ ³ª¿À±âÀü±îÁö´Â ÀÚ½Ä ´ÙÀ̾ó·Î±×¸¦ Áß°£¿¡ Áö¿îÀûÀÌ ¾ø¾î¼­ÀÎÁö, // ¾Æ¿¹ ÀڽĴÙÀ̾ó·Î±×¸¦ Áö¿ì´Â ÇÔ¼öÀÚü°¡ ¾ø¾ú´Ù. // ±×·¯´Ù EtUIListBoxExÀÇ ¾ÆÀÌÅÛÀ» ÀÚ½Ä ´ÙÀ̾ó·Î±×·Î ó¸®ÇÏ·Á ÇÒ¶§ Ãß°¡ÇÑ ÇÔ¼ö´Ù. // (½ÇÁ¦·Î´Â ÀÚ½Ä ´ÙÀ̾ó·Î±×·Î ó¸®ÇÏÁö ¾Ê±â¶§¹®¿¡ »ç¿ëÇÏÁö´Â ¾Ê´Â´Ù.) // // ÇöÀç´Â EtUIDialogÀÇ ¼Ò¸êÀÚ¿¡¼­ ÀÚ½ÅÀÌ »èÁ¦µÉ¶§ ºÎ¸ð¿¡°Ô ¸®½ºÆ®¿¡¼­ »©¶ó´Â ¿ëµµ·Î »ç¿ëµÈ´Ù. void DelChildDialog( CEtUIDialog *pDialog ); void DelChildModalDialog( CEtUIDialog *pDialog ); public: bool IsRootDialog() { return (m_pParentDialog==NULL)?true:false; } bool IsChildDialog( const CEtUIDialog *pDialog ); CEtUIDialog* GetParentDialog() { return m_pParentDialog; } public: // Note : ÀÚ½Ä À©µµ¿ìÀÇ Show()¸¦ ÇÒ¶§´Â ±× À©µµ¿ìÀÇ Show()¸¦ È£ÃâÇÏÁö ¾Ê°í ¾Æ·¡ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. // void ShowChildDialog( CEtUIDialog *pDialog, bool bShow ); protected: void ShowChildDialog( std::list &listDialog, CEtUIDialog *pDialog, bool bShow ); bool IsAllowRender(); public: static void SetTooltipDlg( CEtUIDialog *pTooltipDlg ) { s_pTooltipDlg = pTooltipDlg; } static void ShowTooltipDlg( CEtUIControl *pControl, bool bShow, int nStringIndex = 0, DWORD color = 0xffffffff, bool bPermanent = false ); static void ShowTooltipDlg( CEtUIControl *pControl, bool bShow, const std::wstring &strTooltip, DWORD color = 0xffffffff, bool bPermanent = false ); static int GetTooltipStringIndex() { return s_nTooltipStringIndex; } static bool IsTooltipControl(CEtUIControl* pCtrl); static bool IsShowTooltipDlg() { return s_pTooltipDlg->IsShow(); } virtual void SetTooltipControl( CEtUIControl *pControl ) {} virtual void SetTooltipInfo(DWORD color = 0xffffffff, bool bPermanent = true) { _ASSERT(0); } virtual void ClearTooltipInfo() { _ASSERT(0); } virtual CEtUIControl* GetTooltipCtrl() const { _ASSERT(0); return NULL; } static float GetDialogScale() { return s_fDialogScale; } static void UpDialogSize(); static void DownDialogSize(); static void CalcDialogScaleValue( int nWidth = 0, int nHeight = 0 ); // ÇØ»óµµ¿¡ µû¸¥ ½ºÄÉÀϰª ±¸ÇØ Àû¿ëÇϱâ. static void CalcDialogScaleByResolution( int nWidth, int nHeight ); static void SetDialogSize( int nStep, int nWidth = 0, int nHeight = 0 ); static int GetTextureMemorySize() { return s_nDialogTextureSize; } void ProcessMemoryOptimize( float fElapsedTime ); void FreeDialogTexture(); void LoadDialogTexture(); public: void SetFadeMode( FadeModeEnum Mode ) { m_FadeMode = Mode; } bool IsMouseInDlg() { return m_bMouseInDialog; } void GetMouseMovePoints( float &fMouseX, float &fMouseY ); void GetScreenMouseMovePoints( float &fMouseX, float &fMouseY ); void SetRenderColor( DWORD dwColor ) { m_renderDlgColor.dwColor[UI_STATE_NORMAL] = dwColor; m_renderDlgColor.dwCurrentColor = dwColor; } void SetSoundEnable( bool bEnable ) { m_DlgInfo.bSound = bEnable; } // Note : ºÎ¸ð À©µµ¿ì°¡ º¸ÀÌÁö ¾Ê¾Æµµ ÀÚ½ÄÀÇ ¸Þ¼¼ÁöÇÁ·Î½ÃÁ®¿¡ µé¾î°¡µµ·Ï ÇÑ´Ù. // ¿¹¸¦ µé¸é äÆÃâ¿¡¼­ äÆÃâÀÌ ¾Èº¸À϶§ ¸¶¿ì½º Ŭ¸¯À¸·Î äÆÃâ¿¡ Æ÷Ä¿½º°¡ °¡µµ·Ï Çϱâ À§ÇØ ¾²¿´´Ù. // void SetPassMessageToChild( bool bPass ) { m_bPassMessageToChild = bPass; } void SetShowModal( bool bShowModal ) { m_bShowModal = bShowModal; } void SetElementDialog( bool bElement ) { m_bElementDialog = bElement; } bool IsElementDialog() { return m_bElementDialog; } // ElementDialogÀÇ °æ¿ì¿£ º¸Åë UI_TYPE_SELF·Î »ý¼ºÇؼ­ Á÷Á¢ MsgProc¹× RenderµÇ´Â °æ¿ì°¡ ¸¹±â¶§¹®¿¡ // ÇöÀç º¸¿©Áö°í ÀÖ´Â ´ÙÀ̾ó·Î±×ÀÎÁö¸¦ IsShowÇÔ¼ö·Î °Ë»çÇÒ ¼ö ¾øÀ»¶§°¡ ¸¹´Ù. À̶© Á÷Á¢ ¼³Á¤Çؼ­ ¾ò¾î¿À´Â ¼ö¹Û¿¡ ¾ø´Ù. virtual void SetElementDialogShowState( bool bShow ) { m_bElementDialogShowState = bShow; } bool IsShowElementDialog() { return m_bElementDialogShowState; } // ÇÖŰ¹ö±×¶§¹®¿¡ ¾î¿ ¼ö ¾øÀÌ ¸¸µç ÇÔ¼ö. void SetHotKeyState( SHORT HotKeyState ) { m_HotKeyState = HotKeyState; } bool IsCmdControl( const char *szCmdCtlName ); protected: void UpdateScreen(); void UpdateFrameRectsEx(); void SetCmdControlName( const char *szCmdCtlName ) { m_strCmdControlName = szCmdCtlName; } const std::string& GetCmdControlName() const { return m_strCmdControlName; } void FadeIn( float fElapsedTime ); void FadeOut( float fElapsedTime ); void SetFadeIn() { m_bFadeOut = false; } void SetFadeOut() { m_bFadeOut = true; } virtual bool OnMouseMove( float fX, float fY ); public: void CreateTestUIControl(); bool Load_01( CStream &Stream, SUIFileHeader &fileheader ); bool Load( CStream &Stream ); bool Save( CStream &Stream ); const char *GetDialogFileName() { return m_strDialogFileName.c_str(); } const char *GetDialogUITextureFileName() { return m_DlgInfo.szUITexturename; } void SetDialogID( int nID ) { m_nDialogID = nID; } int GetDialogID() { return m_nDialogID; } virtual void Show( bool bShow ); virtual bool IsShow() const { return m_bShow; } void SetAcceptInputMsgWhenHide( bool bAcceptMsg ) { m_bAcceptInputMsgWhenHide = bAcceptMsg; }; HWND GetHWnd() { return m_hWnd; } void SetHWnd( HWND hWnd ) { m_hWnd = hWnd; } void SetCallback( CEtUICallback *pCallback ) { m_pCallback = pCallback; } CEtUICallback *GetCallBack() { return m_pCallback; } void SetDlgInfo( SUIDialogInfo &DlgInfo ); void GetDlgInfo( SUIDialogInfo &DlgInfo ); void ReloadDlgTexture(); void DeleteDlgTexture(); // Note : °ÔÀÓÀÇ ±âº» µðÆúÆ® ÇØ»óµµ´Â 1024x768. // Border´Â ÇöÀç ½ºÅ©¸°ÀÇ Å©±â¿¡¼­ µðÆúÆ® ½ºÅ©¸°ÀÇ Å©±â¸¦ »« ºÎºÐÀÇ »çÀÌÁîÀÔ´Ï´Ù. // Ratio´Â µðÆúÆ® Å©±â¿Í ÇöÀç ½ºÅ©¸°ÀÇ Å©±âÀÇ ºñÀ²ÀÔ´Ï´Ù. // float GetScreenWidth() { return m_fScreenWidth; } float GetScreenWidthBorderSize() { return m_fScreenWidthBorder; } float GetScreenWidthRatio() { return m_fScreenWidthRatio; } float GetScreenHeight() { return m_fScreenHeight; } float GetScreenHeightBorderSize() { return m_fScreenHeightBorder; } float GetScreenHeightRatio() { return m_fScreenHeightRatio; } //void GetScreenSize( float &fWidth, float &fHeight ); float GetXCoord(); float GetYCoord(); virtual void MoveDialog( float fX, float fY ); void SetAllignType( UIAllignHoriType Hori, UIAllignVertType Vert ) { m_DlgInfo.AllignHori = Hori; m_DlgInfo.AllignVert = Vert; } void GetAllignType( UIAllignHoriType &Hori, UIAllignVertType &Vert ) { Hori = m_DlgInfo.AllignHori; Vert = m_DlgInfo.AllignVert; } virtual void SetDlgCoord( const SUICoord &DlgCoord ) { m_DlgInfo.DlgCoord = DlgCoord; UpdateRects(); } void GetDlgCoord( SUICoord &Coord ) { Coord = m_DlgInfo.DlgCoord; } const SUICoord& GetDlgCoord() const { return m_DlgInfo.DlgCoord; } SUICoord DlgCoordToScreenCoord( const SUICoord &Coord ); SUICoord ScreenCoordToDlgCoord( SUICoord &Coord ); float Width() { return m_DlgInfo.DlgCoord.fWidth; } float Height() { return m_DlgInfo.DlgCoord.fHeight; } void GetPosition( float &fX, float &fY ); void SetPosition( float fX, float fY ); CEtUIControl *GetControlAtPoint( float fX, float fY ); int GetTemplateCount() { return ( int )m_vecUITemplate.size(); } void SetTemplate( int nIndex, CEtUITemplate &Template ); int AddTemplate( CEtUITemplate &Template ); void DeleteTemplate( int nIndex ); void DeleteAllTemplate(); CEtUITemplate *GetTemplate( int nIndex ); float GetFontHeight( int &nFontSetIndex, int nFontHeight ); //ID3DXFont *GetFont( int &nFontSetIndex, int nFontHeight ); const wchar_t* GetUIString( int nCategoryID, int nIndex ); void PointToFloat( POINT pt, float &fX, float &fY ); void SetUITextureName( const char *pszTextureName ) { strcpy_s( m_DlgInfo.szUITexturename, _MAX_PATH, pszTextureName ); } EtTextureHandle GetUITexture() { return m_hTexture; } void SetUITexture( EtTextureHandle hTexture ) { SAFE_RELEASE_SPTR( m_hTexture ); m_hTexture = hTexture; } // Note : °°Àº Ŭ·¡½º ŸÀÔÀÇ ÄÁÆ®·Ñ ¸®½ºÆ®¸¦ ¹ÝȯÇÑ´Ù. // ex) std::vector vector // template < typename T > void GetGontrolList( std::vector< T* > &vecControl ); std::vector& GetControlList() { return m_vecControl; } int GetControlCount() { return ( int )m_vecControl.size(); } CEtUIControl *GetControl( const char *pszControlName ); template < typename T > T* _GC( const char *pszControlName ); template < typename T > T* GetControl( const char *pszControlName, bool *pExistControl = NULL ); //#if defined(_DEBUG) || defined(_RDEBUG) static bool s_bUITest; static std::map s_mapUITest; //#endif CEtUIControl *GetControl( int nIndex ) { return m_vecControl[ nIndex ]; } void SetControl( int nIndex, CEtUIControl *pControl ) { m_vecControl[ nIndex ] = pControl; } CEtUIControl *CreateControl( UI_CONTROL_TYPE Type ); void DeleteControl( CEtUIControl *pControl ); void DeleteAllControl(); virtual bool FindControl( std::vector< CEtUIControl* > &vecControl, int nTypeCount, UI_CONTROL_TYPE *pType, bool bCheckCoveredControl, std::vector &vecDlgCoord ); void MoveToHead( CEtUIControl *pControl ); void MoveToTail( CEtUIControl *pControl ); //void DeleteAllFont(); bool IsUsableFocusControl(); int FindControlIndex( CEtUIControl *pControl ); CEtUIControl *GetNextControl( CEtUIControl *pControl ); CEtUIControl *GetPrevControl( CEtUIControl *pControl ); bool OnCycleFocus( bool bForward ); void RequestFocus( CEtUIControl* pControl ); void PushFocusControl(); void PopFocusControl(); #ifdef PRE_FIX_COMBOBOX_ELLIPSIS bool MakeStringWithEllipsis(SUIElement* pElement, float lineWidth, std::wstring& text, const std::wstring& symbol); #else void MakeStringWithEllipsis(SUIElement* pElement, float lineWidth, std::wstring& text, const std::wstring& symbol); #endif // Note : ¾Æ·¡ ÇÔ¼öµéÀº UITool¿¡¼­ ¾²ÀδÙ. // void ShowAllControl( bool bShow ); void EnableAllControl( bool bEnable ); void UpdateAllControl(); void ClearRadioButtonGroup( int nButtonGroup ); void DrawDlgFrame(); void CalcTextRect( LPCWSTR strText, SUIElement *pElement, SUICoord &Coord, int nCount = -1, DWORD dwFontFormat = 0xffffffff ); void CalcTextRect( LPCWSTR szText, int fontIndex, int fontHeight, SUICoord &CalcCoord, DWORD dwFontFormat, bool bUseCache ); void DrawDlgText( LPCWSTR szText, SUIElement *pElement, DWORD dwFontColor, const SUICoord &Coord, int nCount = -1, DWORD dwFontFormat = 0xffffffff, bool bClip = false, float ZValue = 0.f, DWORD dwBgColor = 0, int nBorderFlag = 0 ); void DrawSprite( EtTextureHandle hTexture, SUICoord &UVCoord, DWORD dwUIColor, SUICoord &Coord, float fRotate = 0.0f, float ZValue = 0.f ); void DrawSprite( SUICoord &UVCoord, DWORD dwUIColor, SUICoord &Coord, float fRotate = 0.0f, float ZValue = 0.f ); void DrawRect( SUICoord &Coord, DWORD dwColor ); public: virtual void Initialize( const char *pFileName, bool bShow ); virtual void Initialize( bool bShow ); virtual void InitialUpdate() {} virtual CEtUIControl *CreateControl( SUIControlProperty *pProperty ); virtual bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual void ProcessCommand( UINT nCommand, bool bTriggeredByUser, CEtUIControl *pControl, UINT uMsg = 0 ); virtual void Render( float fElapsedTime ); virtual void Process( float fElapsedTime ); virtual void UpdateDlgCoord( float fX, float fY, float fWidth, float fHeight ); virtual void UpdateRects(); virtual void OnCloseCompletely() {} // ½ºÅ³Æ®¸®¿¡¼­ »ç¿ëÇÔ. ÇüÁ¦ ´ÙÀ̾ó·Î±×ÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏ. // content ´ÙÀ̾ó·Î±×°¡ ½ºÅ³Æ®¸®Ã³·³ °ãÃÄÀÖÀ¸¸é ÀÔ·Â ¸Þ½ÃÁö°¡ ÀÛÀº ´ÙÀ̾ó·Î±×¿¡ ¿ÀÁö ¾Ê±â ¶§¹®¿¡ // CEtUIDialog::ShowChildDialog() ÇÔ¼ö È£Ã⠽ÿ¡ Ã¼Å©ÇØ¼­ Æ÷Ä¿½Ì 󸮽ÿ¡ °¡Àå µÚ¿¡ ¿Àµµ·Ï ¼ÂÆÃÇÕ´Ï´Ù. virtual void GetContentDialog( /*IN OUT*/ std::vector& vlpContentDialogs ) {}; virtual void OnChangeResolution(); static void ProcessChangeResolution(); virtual void OnEndInitialize(); virtual void OnHandleMsg(int protocol, char* pData) {} }; template < typename T > void CEtUIDialog::GetGontrolList( std::vector< T* > &vecControl ) { for( int i=0; i<(int)m_vecControl.size(); i++ ) { if( m_vecControl[i] ) { if( typeid(*m_vecControl[i]) == typeid( T ) ) { vecControl.push_back( (T*)m_vecControl[i] ); } } } } #define CONTROL( cls, name ) _GC(#name) #define DN_CONTROL( cls, name ) _GC(#name) // ÃÖÀûÈ­ ¹öÀü template < typename T > T* CEtUIDialog::_GC( const char *pszControlName ) { std::map< std::string, CEtUIDialog*>::iterator it = m_cachedControls.find(pszControlName); if( it != m_cachedControls.end() ) { return (T*)it->second; } bool bExistControl = false; T *pResult = GetControl( pszControlName, &bExistControl); if( bExistControl ) { // Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿£ °è¼Ó °æ°í¸Þ¼¼Áö°¡ ¶°¼­ ¾Ë ¼ö ÀÖµµ·Ï ÇÑ´Ù.. m_cachedControls[ pszControlName ] = (CEtUIDialog*)pResult; } else { static bool bFirst = true; if( bFirst ) { ASSERT( false ); bFirst = false; } } return pResult; } template < typename T > T* CEtUIDialog::GetControl( const char *pszControlName, bool *pExistControl ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( strcmp( pszControlName, m_vecControl[ i ]->GetControlName() ) == 0 ) { #if defined(_DEBUG) || defined(_RDEBUG) // Ȥ½Ã ¸ð¸¦ ½Ç¼ö¿¡ ´ëºñÇØ µð¹ö±ë ½Ã¿¡¸¸ ŸÀÔüũ¸¦ ÇØÁØ´Ù. T* pResult = dynamic_cast(m_vecControl[ i ]); if( !pResult ) { ASSERT( 0 && "UI Control ij½ºÆÃ ½ÇÆÐ!!"); T* pTempControl = new T( 0 ); m_TempControlList.push_back( pTempControl ); if( pExistControl ) *pExistControl = false; return pTempControl; } #else T* pResult = static_cast(m_vecControl[ i ]); #endif if( pExistControl ) *pExistControl = true; return pResult; } } //#if defined(_DEBUG) || defined(_RDEBUG) //assert( 0 && "UI Control À» ãÀ» ¼ö ¾ø½À´Ï´Ù! ÀÚ¼¼ÇÑ Á¤º¸´Â EtUIDialog.hÀÇ 374¶óÀÎÀ¸·Î"); char szFileName[256]; _GetFullFileName(szFileName, _countof(szFileName), m_strDialogFileName.c_str()); OutputDebug(" [UI Error] \"%s\" ÆÄÀÏÀÇ %s Control À» ãÀ» ¼ö ¾ø½À´Ï´Ù!\n", szFileName, pszControlName); //#endif // ÆÄÀÏ¿¡ Ãâ·ÂÇÒ¶§´Â Çѹø Ãâ·ÂÇѰŠ°Ç³Ê¶Ù°Ô Çϱâ À§ÇØ, string ¸Ê¿¡ ³Ö¾îµÎ°í ¾øÀ»¶§¸¸ Ãâ·Â. if( s_bUITest ) { std::string szKey = szFileName; szKey += "_"; szKey += pszControlName; std::map::iterator it = s_mapUITest.find( szKey ); if( it == s_mapUITest.end() ) { FILE *fp = NULL; fopen_s( &fp, "uitest.txt", "at" ); fprintf_s( fp, "[UI Error] \"%s\" ÆÄÀÏÀÇ %s Control À» ãÀ» ¼ö ¾ø½À´Ï´Ù!\n", szFileName, pszControlName ); fclose( fp ); s_mapUITest.insert( make_pair( szKey, 1 ) ); } } // ÄÁÆ®·ÑÀÌ ¾ø¾îµµ »¶Àº ³ªÁö ¾Ê´Â´Ù. ´ë½Å µ¿ÀÛÀº Á¦´ë·Î ÇÏÁö ¾ÊÀ½.. for( DWORD i=0; iGetControlName(), pszControlName ) == NULL ) return static_cast(m_TempControlList[i]); } T* pTempControl = new T( 0 ); pTempControl->SetParent( this ); if( pszControlName ) _strcpy( pTempControl->GetProperty()->szUIName, _countof(pTempControl->GetProperty()->szUIName), pszControlName, (int)strlen(pszControlName) ); m_TempControlList.push_back( pTempControl ); if( pExistControl ) *pExistControl = false; return pTempControl; }