#include "StdAfx.h" #include "EtUIDialog.h" #include "EtUIControl.h" #include "EtUIStatic.h" #include "EtUIButton.h" #include "EtUICheckBox.h" #include "EtUIRadioButton.h" #include "EtUIScrollBar.h" #include "EtUISlider.h" #include "EtUIListBox.h" #include "EtUIComboBox.h" #include "EtUIEditBox.h" #include "EtUIIMEEditBox.h" #include "EtUIProgressBar.h" #include "EtUITemplate.h" #include "EtUIMan.h" #include "EtUIControlCreator.h" #include "EtUISound.h" #include "DebugSet.h" #include "EtResourceMng.h" #include "EtType.h" #include "EtLoader.h" #include "EtFontMng.h" #include "EtSprite.h" #ifdef _DEBUG #define new new(_NORMAL_BLOCK,__FILE__,__LINE__) #endif CEtUIDialog *CEtUIDialog::s_pTooltipDlg = NULL; int CEtUIDialog::s_nTooltipStringIndex = 0; std::wstring CEtUIDialog::s_strTooltipString = L""; CEtUIDialog *CEtUIDialog::s_pFadeDlg = NULL; float CEtUIDialog::s_fScreenMouseX = 0.0f; float CEtUIDialog::s_fScreenMouseY = 0.0f; float CEtUIDialog::s_fDialogScale = 1.0f; float CEtUIDialog::s_fDialogScaleValueVert = 0.0f; float CEtUIDialog::s_fDialogScaleValueHori = 0.0f; float CEtUIDialog::s_fMinDialogScale = 1.0f; float CEtUIDialog::s_fMaxDialogScale = 1.0f; int CEtUIDialog::s_nUISize = 0; void (_stdcall *CEtUIDialog::s_pAutoCursorPtr)( bool bShow ) = NULL; int CEtUIDialog::s_nDialogTextureSize = 0; // 0.5f ·Î ¼³Á¤ÇÒ °æ¿ì ¿ÀÇÁ¼ÂÀÌ ³Ê¹« Ä¿¼­ ÁÂÃø,¿ìÃø ¸Þ´º°¡ °ãÃĺ¸ÀÌ°Ô µÈ´Ù.(#15687 À̽´¶§¹®¿¡ 0.18·Î ¼öÁ¤ÇÕ´Ï´Ù.) #define UI_DIALOG_SCALE_VALUE 0.18f //#if defined(_DEBUG) || defined(_RDEBUG) bool CEtUIDialog::s_bUITest = false; std::map CEtUIDialog::s_mapUITest; //#endif CEtUIControl *CEtUIDialog::s_pMouseEnterControl = NULL; #define CHECK_DIALOG_CRASH #ifdef CHECK_DIALOG_CRASH char g_szCurMsgProcDialog[256] = {0,}; #endif #pragma warning(disable:4482) CEtUIDialog::CEtUIDialog( UI_DIALOG_TYPE dialogType, CEtUIDialog *pParentDialog, int nID, CEtUICallback *pCallback, bool bAutoCursor ) : CEtUIDialogBase(dialogType) { m_nDialogID = nID; m_bShow = true; m_bAcceptInputMsgWhenHide = false; m_hWnd = NULL; m_pDefaultControl = NULL; m_pCallback = pCallback; m_fScreenWidthRatio = 1.0f; m_fScreenHeightRatio = 1.0f; m_fScreenWidthBorder = 0.0f; m_fScreenHeightBorder = 0.0f; m_fScreenWidth = 0.0f; m_fScreenHeight = 0.0f; m_bMouseInDialog = false; m_FadeMode = FadeModeEnum::None; m_bFadeOut = false; m_bEndInitialize = false; m_fMouseX = 0.0f; m_fMouseY = 0.0f; m_HotKeyState = 0; m_nHotKey = 0; m_bPassMessageToChild = false; m_bShowModal = true; m_bAutoCursor = bAutoCursor; m_bCursor = false; m_bElementDialog = false; m_bElementDialogShowState = false; if( dialogType >= UI_TYPE_CHILD && dialogType <= UI_TYPE_CHILD_MODAL ) { ASSERT( pParentDialog&&"CEtUIDialog::CEtUIDialog" ); } m_pParentDialog = pParentDialog; if( m_pParentDialog ) { // Note : ºÎ¸ð°¡ ÀÖÀ¸¸é ÀÚ½Ä À©µµ¿ì·Î µî·ÏÇÑ´Ù. // m_pParentDialog->AddChildDialog( this ); if( dialogType == UI_TYPE_CHILD_MODAL ) { m_pParentDialog->AddChildModalDialog( this ); } // ´ç¿¬È÷ ÀÌ°Ô ¸Â´Â ÁÙ ¾Ë°í °íÃÆ´õ´Ï Â÷ÀϵåµéÀÌ ¾È¶á´Ù. // ã¾Æº¸´Ï, Â÷Àϵ帮½ºÆ®¸¸ ·»´õ¸µÇϰí, Â÷Àϵå¸ð´ÞÀº MsgProc¿¡¼­ ¸ð´Þ󸮸¸ ÇÏ°í ´õÀÌ»ó ¾È¾²´Â °Í. // ¿Ö ÀÌ·¸°Ô ÇßÀ»±î.. //if( dialogType == UI_TYPE_CHILD ) //{ // m_pParentDialog->AddChildDialog( this ); //} //else if( dialogType == UI_TYPE_CHILD_MODAL ) //{ // m_pParentDialog->AddChildModalDialog( this ); //} } m_fLastShowDelta = 10.f; m_bLoadedTexture = false; } CEtUIDialog::~CEtUIDialog(void) { if( m_bAutoCursor && m_bCursor && s_pAutoCursorPtr ) { s_pAutoCursorPtr( false ); m_bCursor = false; } PopFocusControl(); DeleteAllControl(); SAFE_DELETE_PVEC( m_vecUITemplate ); if( m_hTexture && m_hTexture->GetRefCount() == 1 ) s_nDialogTextureSize -= m_hTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hTexture ); if( m_hDlgTexture && m_hDlgTexture->GetRefCount() == 1 ) s_nDialogTextureSize -= m_hDlgTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hDlgTexture ); m_bLoadedTexture = false; SAFE_DELETE_PVEC( m_TempControlList ); // »ý¼ºÀÚ¿¡¼­ µî·ÏÇϱ淡, ¼Ò¸êÀÚ¿¡¼­ »èÁ¦ÇÏ·Á°í Çß´õ´Ï, ÅøÆÁÀÇ static ´ÙÀ̾ó·Î±×¶§¹®¿¡ »¶³µ¾ú´Ù. // ¼Ò¸ê¼ø¼­¸¸ Àß ¸ÂÃçÁÖ¸é µÇ´Ï, Á¦ÀÏ ÇÏ´Ü ÀڽĺÎÅÍ Â÷·Ê´ë·Î »èÁ¦ÇÏ¸é µÈ´Ù. if( m_pParentDialog ) { // ºÎ¸ð°¡ ÀÖÀ¸¸é ÀÚ½Ä À©µµ¿ì¸®½ºÆ®¿¡¼­ Á¦°Å. m_pParentDialog->DelChildDialog( this ); if( m_emDialogType == UI_TYPE_CHILD_MODAL ) { m_pParentDialog->DelChildModalDialog( this ); } } } void CEtUIDialog::OnEndInitialize() { m_bEndInitialize = true; } void CEtUIDialog::Initialize( bool bShow ) { // Note : ¾Æ·¡ ÇÔ¼öµéÀº È£ÃâµÇ´Â ¼ø¼­°¡ Áß¿äÇÏ´Ù. // UpdateScreen(); InitialUpdate(); if( !IsRootDialog() ) { m_pParentDialog->ShowChildDialog( this, bShow ); } else { Show( bShow ); } OnEndInitialize(); ThreadDelay(); } void CEtUIDialog::Initialize( const char *pFileName, bool bShow ) { // Note : ¾Æ·¡ ÇÔ¼öµéÀº È£ÃâµÇ´Â ¼ø¼­°¡ Áß¿äÇÏ´Ù. // UpdateScreen(); m_strDialogFileName.clear(); if( pFileName ) { m_strDialogFileName = pFileName; CResMngStream Stream( pFileName ); if( Stream.IsValid() ) { if( !Load( Stream ) ) { CDebugSet::ToLogFile( "CEtUIDialog::Initialize, %s load failed!", pFileName ); } } else { CDebugSet::ToLogFile( "CEtUIDialog::Initialize, %s File Not Found!", pFileName ); } } InitialUpdate(); if( !IsRootDialog() ) { m_pParentDialog->ShowChildDialog( this, bShow ); } else { Show( bShow ); } OnEndInitialize(); } bool CEtUIDialog::Load( CStream &Stream ) { SUIFileHeader Header; char szReserved[ UI_HEADER_RESERVED ]={0}; Stream.ReadBuffer( &Header, sizeof( SUIFileHeader ) ); Stream.ReadBuffer( szReserved, UI_HEADER_RESERVED ); switch( Header.nVersion ) { case UI_FILE_VERSION_01: Load_01( Stream, Header ); break; case UI_FILE_VERSION: { m_DlgInfo.Load(Stream); for( int i = 0; i < Header.nTemplateCount; i++ ) { CEtUITemplate *pTemplate = new CEtUITemplate(); pTemplate->Load( Stream ); pTemplate->OnLoaded(); m_vecUITemplate.push_back( pTemplate ); } for( int i = 0; i < Header.nControlCount; i++ ) { SUIControlProperty Property; Property.Load(Stream); CEtUIControl *pControl = CreateControl( &Property ); if( Property.bDefaultControl ) { m_pDefaultControl = pControl; } } } break; default: ASSERT(0&&"CEtUIDialog::Load, default"); break; } // UIÂÊ ÅØ½ºÃÄ´Â Å©±â¿¡ µû¶ó ¹Î°¨ÇÏ°Ô ¹ÝÀÀÇØ¼­ 2ÀÇ ½Â¼ö Áö¿øÇÏÁö ¾Ê´Â Ä«µå¶û ¶È°°ÀÌ º¸¿©¾ß ÇØ¼­ ÀÌ·¸°Ô ÇÑ´Ù. //CEtTexture::SetPow2( true ); /* if( m_hTexture && m_hTexture->GetRefCount() == 1 ) s_nDialogTextureSize -= m_hTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hTexture ); if( EtInterface::g_bEtUIInitTool ) CEtResource::FlushWaitDelete( RT_TEXTURE ); m_hTexture = LoadResource( m_DlgInfo.szUITexturename, RT_TEXTURE, true ); if( m_hTexture && m_hTexture->GetRefCount() == 1 ) s_nDialogTextureSize += m_hTexture->GetFileSize(); if( m_hDlgTexture && m_hDlgTexture->GetRefCount() == 1 ) s_nDialogTextureSize -= m_hDlgTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hDlgTexture ); if( EtInterface::g_bEtUIInitTool ) CEtResource::FlushWaitDelete( RT_TEXTURE ); m_hDlgTexture = LoadResource( m_DlgInfo.szDlgTextureName, RT_TEXTURE, true ); if( m_hDlgTexture && m_hDlgTexture->GetRefCount() == 1 ) s_nDialogTextureSize += m_hDlgTexture->GetFileSize(); */ LoadDialogTexture(); //CEtTexture::SetPow2( false ); m_renderDlgColor.dwColor[UI_STATE_NORMAL] = m_DlgInfo.dwDlgColor; m_renderDlgColor.dwCurrentColor = m_DlgInfo.dwDlgColor; m_BaseDlgCoord = m_DlgInfo.DlgCoord; UpdateRects(); UpdateAllControl(); for( int i = 0; i < Header.nTemplateCount; i++ ) SAFE_RELEASE_SPTR( m_vecUITemplate[i]->m_hTemplateTexture ); return true; } bool CEtUIDialog::Save( CStream &Stream ) { SUIFileHeader Header; char szReserved[ UI_HEADER_RESERVED ]={0}; Header.nTemplateCount = ( int ) m_vecUITemplate.size(); Header.nControlCount = ( int )m_vecControl.size(); Stream.WriteBuffer( &Header, sizeof( SUIFileHeader ) ); Stream.WriteBuffer( szReserved, UI_HEADER_RESERVED ); m_DlgInfo.Save(Stream); for( int i = 0; i < Header.nTemplateCount; i++ ) { m_vecUITemplate[i]->Save( Stream ); } for( int i = 0; i < Header.nControlCount; i++ ) { SUIControlProperty Property; m_vecControl[i]->GetProperty( Property ); Property.Save(Stream); } return true; } bool CEtUIDialog::Load_01( CStream &Stream, SUIFileHeader &fileheader ) { m_DlgInfo.Load(Stream); ASSERT(fileheader.nFontCount&&"CEtUIDialog::Load, Font Count is 0!"); for( int i = 0; i < fileheader.nFontCount; i++ ) { SFontInfo FontInfo; FontInfo.Load(Stream); } for( int i = 0; i < fileheader.nTemplateCount; i++ ) { CEtUITemplate *pTemplate = new CEtUITemplate(); pTemplate->Load( Stream ); m_vecUITemplate.push_back( pTemplate ); } for( int i = 0; i < fileheader.nControlCount; i++ ) { SUIControlProperty Property; Property.Load(Stream); CEtUIControl *pControl = CreateControl( &Property ); if( Property.bDefaultControl ) { m_pDefaultControl = pControl; } } return true; } void CEtUIDialog::Show( bool bShow ) { if( bShow == m_bShow ) return; if( bShow ) { if( !m_bLoadedTexture ) { LoadDialogTexture(); } SetFadeIn(); PushFocusControl(); } else { SetFadeOut(); PopFocusControl(); // âÀÌ ´ÝÈ÷´Â »óȲ¿¡¼­ ÄÁÆ®·ÑÀ» ´©¸¥Ã¤ ÀÖ´Ù¸é,(°­È­, Á¦ÀÛ¿äûâÀÇ Ãë¼Ò¹öư) // SetCapture ÈÄ ReleaseCapture°¡ È£ÃâµÇÁö ¾Ê°Å³ª, m_bPressed°¡ trueÀÎ »óÅ·ΠÀ¯ÁöµÈ´Ù°Å³ªÇؼ­ // ÅøÆÁ ¹× ¸¶¿ì½º¿À¹ö ·»´õ¸µÀÌ Á¦´ë·Î ÀÌ·ïÁöÁö ¾Ê°ÔµÈ´Ù. // ±×·¡¼­ ÄÁÆ®·ÑµéÀ» µÚÁ®¼­ ´­·¯Áø ÄÁÆ®·ÑµéÀº ¿ø·¡´ë·Î µ¹·Á³õ´Â´Ù. // // È®ÀåÇü ¸®½ºÆ®¹Ú½ºÀÇ ¾ÆÀÌÅÛÀ¸·Î µé¾î°¡´Â ¿¤¸®¸ÕÆ® ´ÙÀ̾ó·Î±×´Â SetPressed¸¦ Àû¿ë½ÃŰÁö ¾Ê¾Ò¾ú´Ù. // ±×·¯³ª, SELFŸÀÔÀ¸·Î ºüÁö¸é¼­ º°µµÃ³¸®¸¦ ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. if( !IsElementDialog() ) { bool bTooltipControl = false; for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( m_vecControl[ i ]->IsPressed() || m_vecControl[ i ]->IsRightPressed() || m_vecControl[ i ]->IsHaveScrollBarControl() ) { m_vecControl[ i ]->SetPressed( false ); m_vecControl[ i ]->SetRightPressed( false ); ReleaseCapture(); } // m_bPressed »Ó¸¸ ¾Æ´Ï¶ó m_bMouseEnterµµ ÇÊ¿äÇÏ°Ô µÇ¾ú´Ù. // CEtUIDialogÀÇ MsgProc¿¡¼­ WM_MOUSEMOVE°¡ µé¾î¿Ã¶§ CEtUIDialog::OnMouseMoveÇÔ¼ö°¡ È£ÃâµÇ´Âµ¥, // ÀÌ ÇÔ¼ö¸¦ º¸¸é ÀÚ½ÅÀÇ ´ÙÀ̾ó·Î±× ¿µ¿ª¾È¿¡ ¸¶¿ì½º Æ÷ÀÎÅͰ¡ ¾øÀ»¶§ ReleaseMouseEnterControlÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. // ÀÌ ÇÔ¼öÈ£ÃâÀ» ÅëÇØ º¸Åë ´ëºÎºÐÀÇ »óȲ¿¡¼­ ÇØ´ç ÄÁÆ®·ÑÀÇ m_bMouseEnter°¡ Ç®¸®°Ô ¸¶·ÃÀε¥, // µü ÇѰ¡Áö °æ¿ì°¡ ¹®Á¦¿´´Ù. // ¹Ù·Î, Æ©Å丮¾óÀ» Ç÷¹ÀÌÇϽðڽÀ´Ï±î.¶ó´Â ¸Þ¼¼Áö¹Ú½º¿´´Âµ¥, // (ÀÌ°Ç À¯ÀÏÇÏ°Ô ´Ù¸¥ ¸ðµç âÀ» ´Ù Hide½ÃŲ »óÅ¿¡¼­ ³ª¿À´Â ¸Þ¼¼Áö¹Ú½º´Ù.) // ÀÌ ¸Þ¼¼Áö¹Ú½º¿¡¼­ ¾Æ´Ï¿À¸¦ ´©¸£¸é ÆäÀÌµå ¾Æ¿ôÀÌ µÇ¸é¼­ ¸¶À»·Î °¡°ÔµÈ´Ù. // À̶§ ¾Æ¹«°Íµµ º¸¿©Áö´Â ´ÙÀ̾ó·Î±×°¡ ¾øÀ¸´Ï MsgProc°¡ ¾Æ¿¹ È£ÃâµÇÁö ¾Ê°ÔµÇ°í ÀÌ °á°ú // ReleaseMouseEnterControlÇÔ¼ö°¡ Çѹøµµ È£ÃâµÇÁö ¾Ê¾Æ ¾Æ´Ï¿À¹öưÀÇ MouseEnter°ªÀ» ¾Æ¹«µµ º¯°æÇÏÁö ¾Ê´Â´Ù. // ±×¸®°í³ª¼­ CEtUIDialog::s_pMouseEnterControl¿¡ °­Á¦·Î NULLÀ» ´ëÀÔÇÏ´Â DnInterface::FinalizeÇÔ¼ö µîÀÌ È£ÃâµÇ¸é¼­, // ¾Æ´Ï¿À ¹öưÀÇ m_bMouseEnter´Â Á÷Á¢ ¸¶¿ì½º°¡ ¾Æ´Ï¿À¹öư¾È¿¡ µé¾î¿Ô´Ù ³ª°¡Áö ¾Ê´Â ÀÌ»ó º¯ÇÏÁö ¾Ê°ÔµÈ´Ù. // // »ý°¢Çغ¸´Ï Show(false)µÇ´Â ´ÙÀ̾ó·Î±×ÀÇ ÄÁÆ®·ÑÀÇ MouseEnter°ªÀÌ trueÀΰŠÀÚü°¡ ÀÌ»óÇѰа°¾Æ¼­, // ¿©±â¼­ ÇØÁ¦Çϱâ·Î ÇϰڴÙ. if( m_vecControl[ i ]->IsMouseEnter() ) { m_vecControl[ i ]->MouseEnter(false); } if( s_pTooltipDlg && s_pTooltipDlg->GetTooltipCtrl() && m_vecControl[ i ] == s_pTooltipDlg->GetTooltipCtrl() ) bTooltipControl = true; } if( bTooltipControl && s_pTooltipDlg != this ) s_pTooltipDlg->Show( false ); } } if( m_emDialogType == UI_TYPE_MODAL && m_bShowModal ) { ShowModal( this, bShow ); } if( m_bEndInitialize && m_DlgInfo.bSound ) { if( bShow ) { GetUISound().Play( CEtUISound::UI_WINDOW_OPEN ); } else { GetUISound().Play( CEtUISound::UI_WINDOW_CLOSE ); } } m_bShow = bShow; m_fMouseX = 0.0f; m_fMouseY = 0.0f; m_HotKeyState = 0; m_nHotKey = 0; if( m_bAutoCursor && s_pAutoCursorPtr ) { if( m_bShow && m_bCursor == false ) { m_bCursor = true; s_pAutoCursorPtr( true ); } else if( m_bShow == false && m_bCursor ) { m_bCursor = false; s_pAutoCursorPtr( false ); } } } void CEtUIDialog::PointToFloat( POINT pt, float &fX, float &fY ) { fX = pt.x / GetScreenWidth() - GetXCoord(); fY = pt.y / GetScreenHeight() - GetYCoord(); } CEtUIControl *CEtUIDialog::GetControl( const char *pszControlName ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( strcmp( pszControlName, m_vecControl[ i ]->GetControlName() ) == 0 ) { return m_vecControl[ i ]; } } CDebugSet::ToLogFile( "CEtUIDialog::GetControl, %s control not found!", pszControlName ); // Note : UI°¡ »ý¼ºµÇ´Â ºÎºÐÀ̶ó ASSERT()¸¦ È£ÃâÇÏÁö ¾Ê°í assert()¸¦ È£ÃâÇÑ´Ù. // //assert(0&&"CEtUIDialog::GetControl, °æ´ë¸¦ ºÒ·¯ÁÖ¼¼¿ä!"); return NULL; } CEtUIControl *CEtUIDialog::CreateControl( SUIControlProperty *pProperty ) { CEtUIControl *pControl = CreateControl( pProperty->UIType ); pControl->Initialize( pProperty ); return pControl; } CEtUIControl *CEtUIDialog::CreateControl( UI_CONTROL_TYPE Type ) { static CEtUIControlCreator controlCreator; CEtUIControl *pControl(NULL); pControl = controlCreator.CreateControl( Type, this ); if( pControl ) { m_vecControl.push_back( pControl ); } return pControl; } void CEtUIDialog::DeleteControl( CEtUIControl *pControl ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( m_vecControl[ i ] == pControl ) { if( s_pMouseEnterControl == pControl ) s_pMouseEnterControl = NULL; if( focus::IsSameControl(pControl) ) focus::ReleaseControl(); delete m_vecControl[ i ]; m_vecControl.erase( m_vecControl.begin() + i ); break; } } } void CEtUIDialog::DeleteAllControl() { if( focus::IsSameParent(this) ) { focus::ReleaseControl(); } // ¾ÈÁ¤¼º ÄÚµå. // È®ÀåÇü ¸®½ºÆ®¹Ú½ºÀÇ °æ¿ì Show( false )°¡ µÇ´Â µ¿½Ã¿¡ ´ÙÀ̾ó·Î±× ¹× ÀÚ½Ä ÄÁÆ®·ÑµéÀ» Áö¿ì´Âµ¥, // À̶§ ¸¶¿ì½º¸¦ ´ë°í ÀÖ¾ú´Ù¸é, ¾Æ·¡ ½ºÅÂÆ½ Æ÷ÀÎÅͺ¯¼öÀÇ °ªÀÌ deleteµÈ ÄÁÆ®·ÑÀÌ µÇ¹ö¸°´Ù. // ±×·¡¼­ Áö¿ï¶§ È®ÀÎ ÈÄ Áö¿ìµµ·Ï ÇϰڴÙ. for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( s_pMouseEnterControl == m_vecControl[ i ] ) { s_pMouseEnterControl->MouseEnter( false ); s_pMouseEnterControl = NULL; ShowTooltipDlg( NULL, false ); } } SAFE_DELETE_PVEC( m_vecControl ); } bool CEtUIDialog::FindControl( std::vector< CEtUIControl* > &vecControl, int nTypeCount, UI_CONTROL_TYPE *pType, bool bCheckCoveredControl, std::vector &vecDlgCoord ) { std::list< CEtUIDialog* >::reverse_iterator iter; if( !m_listChildModalDialog.empty() ) { iter = m_listChildModalDialog.rbegin(); if( iter != m_listChildModalDialog.rend() ) { if( (*iter) && (*iter)->IsShow() ) { (*iter)->FindControl( vecControl, nTypeCount, pType, bCheckCoveredControl, vecDlgCoord ); return true; } } } CEtUIDialog *pDialog = NULL; iter = m_listChildDialog.rbegin(); for( ; iter != m_listChildDialog.rend(); ++iter ) { // LastRender°Ë»ç´Â ¿ì¼± »ý·«. pDialog = (*iter); if( !pDialog ) continue; if( (pDialog->GetDialogType() != UI_TYPE_SELF && pDialog->IsElementDialog() == false && pDialog->IsShow()) || (pDialog->IsElementDialog() && pDialog->IsShowElementDialog()) ) { if( pDialog->FindControl( vecControl, nTypeCount, pType, bCheckCoveredControl, vecDlgCoord ) ) return true; } } std::vector vecType; for( int i = 0; i < nTypeCount; ++i ) { int nValue = pType[i]; vecType.push_back( nValue ); } CEtUIControl *pControl(NULL); int nVecCtlSize = ( int )m_vecControl.size(); for( int i = 0; i < nVecCtlSize; i++ ) { pControl = m_vecControl[i]; bool bMatched = false; for( int j = 0; j < (int)vecType.size(); ++j ) { if( pControl->GetType() == vecType[j] ) { bMatched = true; break; } } if( bMatched || (int)vecType.size() == 0 ) { if( pControl->IsShow() ) { bool bPushControl = true; if( bCheckCoveredControl ) { // ÀϹÝÀûÀÎ ÄÁÆ®·Ñ·Î »ý°¢ÇØ °¡¿îµ¥ ÁöÁ¡ÀÌ ´Ù¸¥ â¿¡ °¡·ÁÁ®ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. // ¸®½ºÆ®¹Ú½º°°Àº ÄÁÆ®·ÑÀÇ °æ¿ì ¸®½ºÆ®¾ÆÀÌÅ۵鸶´Ù ÀÏÀÏÀÌ Ã¼Å©Çϱ⿣ ³Ê¹« °Ë»çÇÒ°Ô ¸¹¾ÆÁ®¼­ °£´ÜÇÏ°Ô Ã¼Å©¸¸ ÇÏ´Â °ÍÀÌ´Ù. SUICoord ControlCoord; pControl->GetUICoord( ControlCoord ); ControlCoord.fX = ControlCoord.fX + ControlCoord.fWidth/2.0f; ControlCoord.fY = ControlCoord.fY + ControlCoord.fHeight/2.0f; ControlCoord = DlgCoordToScreenCoord( ControlCoord ); for( int k = 0; k < (int)vecDlgCoord.size(); ++k ) { if( ControlCoord.fX >= vecDlgCoord[k].fX && ControlCoord.fY >= vecDlgCoord[k].fY && ControlCoord.fX <= vecDlgCoord[k].fX+vecDlgCoord[k].fWidth && ControlCoord.fY <= vecDlgCoord[k].fY+vecDlgCoord[k].fHeight ) { bPushControl = false; break; } } } if( bPushControl ) vecControl.push_back( pControl ); } } } if( bCheckCoveredControl && IsElementDialog() == false ) { SUICoord DlgCoord; GetDlgCoord( DlgCoord ); DlgCoord.fX = 0.0f; DlgCoord.fY = 0.0f; DlgCoord = DlgCoordToScreenCoord( DlgCoord ); vecDlgCoord.push_back( DlgCoord ); } return false; } void CEtUIDialog::MoveToHead( CEtUIControl *pControl ) { int nSize = ( int )m_vecControl.size(); for( int i = 0; i < nSize; i++ ) { if( m_vecControl[ i ] == pControl ) { m_vecControl.erase( m_vecControl.begin() + i ); m_vecControl.insert( m_vecControl.begin(), pControl ); break; } } } void CEtUIDialog::MoveToTail( CEtUIControl *pControl ) { int nSize = ( int )m_vecControl.size(); for( int i = 0; i < nSize; i++ ) { if( m_vecControl[ i ] == pControl ) { m_vecControl.erase( m_vecControl.begin() + i ); m_vecControl.push_back( pControl ); break; } } } bool CEtUIDialog::IsUsableFocusControl() { if( focus::IsSameParent(this) && focus::IsEnable() ) { return true; } else { return false; } } int CEtUIDialog::FindControlIndex( CEtUIControl *pControl ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( pControl == m_vecControl[ i ] ) { return i; } } return -1; } CEtUIControl *CEtUIDialog::GetNextControl( CEtUIControl *pControl ) { if( m_vecControl.empty() ) { return NULL; } int nIndex; nIndex = FindControlIndex( pControl ); if( nIndex == -1 ) { nIndex = ( int )m_vecControl.size() - 1; } if( nIndex == ( int )m_vecControl.size() - 1 ) { return m_vecControl[ 0 ]; } else { return m_vecControl[ nIndex + 1 ]; } } CEtUIControl *CEtUIDialog::GetPrevControl( CEtUIControl *pControl ) { if( m_vecControl.empty() ) { return NULL; } int nIndex; nIndex = FindControlIndex( pControl ); if( nIndex == -1 ) { nIndex = 0; } if( nIndex == 0 ) { return m_vecControl[ m_vecControl.size() - 1 ]; } else { return m_vecControl[ nIndex - 1 ]; } } bool CEtUIDialog::OnCycleFocus( bool bForward ) { if( !focus::IsSameParent(this) ) { //pControl = NULL; return false; } CEtUIControl *pControl = focus::GetControl(); int nLoopCount(0); while( true ) { if( bForward ) { pControl = GetNextControl( pControl ); } else { pControl = GetPrevControl( pControl ); } if( pControl == NULL ) { break; } if( focus::IsSameControl(pControl) ) { return true; } if( pControl->CanHaveFocus() ) { RequestFocus( pControl ); return true; } nLoopCount++; if( nLoopCount > ( int )m_vecControl.size() ) { break; } } return false; } void CEtUIDialog::RequestFocus( CEtUIControl* pControl ) { if( !pControl ) return; if( focus::IsSameControl(pControl) ) { return; } if( !pControl->CanHaveFocus() ) { return; } focus::SetFocus(pControl); } void CEtUIDialog::PushFocusControl() { focus::PushControl(this); // µµ´ëü ÀÌ°É ¿Ö È£ÃâÇß´ÂÁö... // À̰Ͷ§¹®¿¡ ¼­¹ö¸®½ºÆ® show(true)µÉ¶§ Æ÷Ä¿½º¸¦ ¸®½ºÆ®¹Ú½º¿¡ µÎ¶ó°í Çߴµ¥µµ, // Çϳª ´ÙÀ½À¸·Î °Ç³Ê¼­ Á¢¼Ó¹öưÀÌ Æ÷Ä¿½º¸¦ °¡Áö°Ô µÇ¾ú´Ù.(¸®½ºÆ®¹Ú½º°¡ 3¹ø, Á¢¼Ó¹öưÀÌ 4¹øÀÌ´Ù.) // ¿ì¼± À̰ŠȣÃâ ¾ÈÇϱâ·Î ÇÏ´Ï, ÀÌ»óÇÑ Á¡ ¹ß°ßµÇ¸é ±×¶§ ãµµ·Ï ÇϰڴÙ. //OnCycleFocus( true ); } void CEtUIDialog::PopFocusControl() { focus::PopControl(this); } void CEtUIDialog::ShowAllControl( bool bShow ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { m_vecControl[ i ]->Show( bShow ); } } void CEtUIDialog::UpdateAllControl() { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { m_vecControl[ i ]->UpdateRects(); } } void CEtUIDialog::EnableAllControl( bool bEnable ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { m_vecControl[ i ]->Enable( bEnable ); } } void CEtUIDialog::ClearRadioButtonGroup( int nButtonGroup ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( m_vecControl[ i ] && m_vecControl[ i ]->GetType() == UI_CONTROL_RADIOBUTTON ) { CEtUIRadioButton *pRadioButton = ( CEtUIRadioButton * )m_vecControl[ i ]; if( pRadioButton->GetButtonGroup() == nButtonGroup ) { pRadioButton->SetChecked( false, false ); } } } } void CEtUIDialog::ReloadDlgTexture() { // UIÂÊ ÅØ½ºÃÄ´Â Å©±â¿¡ µû¶ó ¹Î°¨ÇÏ°Ô ¹ÝÀÀÇØ¼­ 2ÀÇ ½Â¼ö Áö¿øÇÏÁö ¾Ê´Â Ä«µå¶û ¶È°°ÀÌ º¸¿©¾ß ÇØ¼­ ÀÌ·¸°Ô ÇÑ´Ù. //CEtTexture::SetPow2( true ); if( m_hDlgTexture ) s_nDialogTextureSize -= m_hDlgTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hDlgTexture ); m_hDlgTexture = LoadResource( m_DlgInfo.szDlgTextureName, RT_TEXTURE, true ); if( m_hDlgTexture ) s_nDialogTextureSize += m_hDlgTexture->GetFileSize(); //CEtTexture::SetPow2( false ); } void CEtUIDialog::DeleteDlgTexture() { ZeroMemory( m_DlgInfo.szDlgTextureName, _countof(m_DlgInfo.szDlgTextureName) ); SAFE_RELEASE_SPTR( m_hDlgTexture ); } void CEtUIDialog::UpdateRects() { if( ( !m_hDlgTexture ) ) { return; } if( (m_DlgInfo.nFrameLeft > 0) || (m_DlgInfo.nFrameRight > 0) || (m_DlgInfo.nFrameTop > 0) || (m_DlgInfo.nFrameBottom > 0) ) { UpdateFrameRectsEx(); } } void CEtUIDialog::UpdateFrameRectsEx() { // Note : ´ÙÀ̾ó·Î±×´Â Å©±â º¯°æ½Ã ±úÁöÁö ¾Êµµ·Ï Çϱâ À§ÇØ ÅØ½ºÃĸ¦ 9ºÎºÐÀ¸·Î ³ª´©¾î¼­ ·£´õÇÑ´Ù. // Á¿ì,À§¾Æ·¡ °ªÀº Åø¿¡¼­ ¼ÂÆÃÇÑ´Ù. °¡¿îµ¥ ºÎºÐÀº ´Ã¾î³ª±â ¶§¹®¿¡ µðÀÚÀνà °í·ÁÇØ¾ßÇÑ´Ù. // float fFrameLeft = m_DlgInfo.nFrameLeft / ( float )m_hDlgTexture->OriginalWidth(); float fFrameTop = m_DlgInfo.nFrameTop / ( float )m_hDlgTexture->OriginalHeight(); float fFrameRight = m_DlgInfo.nFrameRight / ( float )m_hDlgTexture->OriginalWidth(); float fFrameBottom = m_DlgInfo.nFrameBottom / ( float )m_hDlgTexture->OriginalHeight(); float fModWidth = 1.0f - (fFrameLeft+fFrameRight); float fModHeight = 1.0f - (fFrameTop+fFrameBottom); if( fModWidth <= 0.0f || fModHeight <= 0.0f ) { //ASSERT(0&&"Frame Left+RightÇÕ»ê ȤÀº Top+BottomÇÕ»êÀÌ ¿øº»ÅؽºÃ³ Å©±â¸¦ ³Ñ¾ú½À´Ï´Ù."); } m_vecDlgFrameElement.resize( 9 ); m_vecDlgFrameElement[ 0 ].UVCoord.SetCoord( 0.0f, 0.0f, fFrameLeft, fFrameTop ); m_vecDlgFrameElement[ 1 ].UVCoord.SetCoord( fFrameLeft, 0.0f, fModWidth, fFrameTop ); m_vecDlgFrameElement[ 2 ].UVCoord.SetCoord( fFrameLeft+fModWidth, 0.0f, fFrameRight, fFrameTop ); m_vecDlgFrameElement[ 3 ].UVCoord.SetCoord( 0.0f, fFrameTop, fFrameLeft, fModHeight ); m_vecDlgFrameElement[ 4 ].UVCoord.SetCoord( fFrameLeft, fFrameTop, fModWidth, fModHeight ); m_vecDlgFrameElement[ 5 ].UVCoord.SetCoord( fFrameLeft+fModWidth, fFrameTop, fFrameRight, fModHeight ); m_vecDlgFrameElement[ 6 ].UVCoord.SetCoord( 0.0f, fFrameTop+fModHeight, fFrameLeft, fFrameBottom ); m_vecDlgFrameElement[ 7 ].UVCoord.SetCoord( fFrameLeft, fFrameTop+fModHeight, fModWidth, fFrameBottom ); m_vecDlgFrameElement[ 8 ].UVCoord.SetCoord( fFrameLeft+fModWidth, fFrameTop+fModHeight, fFrameRight, fFrameBottom ); fFrameLeft = m_DlgInfo.nFrameLeft / (float)DEFAULT_UI_SCREEN_WIDTH; fFrameTop = m_DlgInfo.nFrameTop / (float)DEFAULT_UI_SCREEN_HEIGHT; fFrameRight = m_DlgInfo.nFrameRight / (float)DEFAULT_UI_SCREEN_WIDTH; fFrameBottom = m_DlgInfo.nFrameBottom / (float)DEFAULT_UI_SCREEN_HEIGHT; fModWidth = m_DlgInfo.DlgCoord.fWidth - (fFrameLeft+fFrameRight); fModHeight = m_DlgInfo.DlgCoord.fHeight - (fFrameTop+fFrameBottom); m_vecDlgFrameCoord.resize( 9 ); m_vecDlgFrameCoord[ 0 ].SetCoord( 0.0f, 0.0f, fFrameLeft, fFrameTop ); m_vecDlgFrameCoord[ 1 ].SetCoord( fFrameLeft, 0.0f, fModWidth, fFrameTop ); m_vecDlgFrameCoord[ 2 ].SetCoord( fFrameLeft + fModWidth, 0.0f, fFrameRight, fFrameTop ); m_vecDlgFrameCoord[ 3 ].SetCoord( 0.0f, fFrameTop, fFrameLeft, fModHeight ); m_vecDlgFrameCoord[ 4 ].SetCoord( fFrameLeft, fFrameTop, fModWidth, fModHeight ); m_vecDlgFrameCoord[ 5 ].SetCoord( fFrameLeft + fModWidth, fFrameTop, fFrameRight, fModHeight ); m_vecDlgFrameCoord[ 6 ].SetCoord( 0.0f, fFrameTop + fModHeight, fFrameLeft, fFrameBottom ); m_vecDlgFrameCoord[ 7 ].SetCoord( fFrameLeft, fFrameTop + fModHeight, fModWidth, fFrameBottom ); m_vecDlgFrameCoord[ 8 ].SetCoord( fFrameLeft + fModWidth, fFrameTop + fModHeight, fFrameRight, fFrameBottom ); } //void CEtUIDialog::GetScreenSize( float &fWidth, float &fHeight ) //{ // fHeight = ( float )GetEtDevice()->Height(); // fWidth = fHeight * 4.0f / 3.0f; //} float CEtUIDialog::GetXCoord() { float fBase(0.0f); switch( m_DlgInfo.AllignHori ) { case AT_HORI_NONE: fBase = GetScreenWidthBorderSize(); break; case AT_HORI_LEFT: fBase = s_fDialogScaleValueHori * UI_DIALOG_SCALE_VALUE; break; case AT_HORI_CENTER: fBase = ( ( 1.0f + GetScreenWidthBorderSize() * 2.0f ) - m_DlgInfo.DlgCoord.fWidth ) * 0.5f; break; case AT_HORI_RIGHT: fBase = ( 1.0f + GetScreenWidthBorderSize() * 2.0f ) - m_DlgInfo.DlgCoord.fWidth - s_fDialogScaleValueHori * UI_DIALOG_SCALE_VALUE; break; case AT_HORI_LEFT_FIXED: fBase = 0.0f; break; case AT_HORI_RIGHT_FIXED: fBase = ( 1.0f + GetScreenWidthBorderSize() * 2.0f ) - m_DlgInfo.DlgCoord.fWidth; break; } return m_DlgInfo.DlgCoord.fX + fBase; } float CEtUIDialog::GetYCoord() { float fBase(0.0f); switch( m_DlgInfo.AllignVert ) { case AT_VERT_NONE: fBase = GetScreenHeightBorderSize(); break; case AT_VERT_TOP: fBase = 0.0f; break; case AT_VERT_CENTER: fBase = ( ( 1.0f + GetScreenHeightBorderSize() * 2.0f ) - m_DlgInfo.DlgCoord.fHeight ) * 0.5f; break; case AT_VERT_BOTTOM: fBase = ( 1.0f + GetScreenHeightBorderSize() * 2.0f ) - m_DlgInfo.DlgCoord.fHeight; break; } return m_DlgInfo.DlgCoord.fY + fBase; } void CEtUIDialog::MoveDialog( float fX, float fY ) { m_DlgInfo.DlgCoord.fX += fX; m_DlgInfo.DlgCoord.fY += fY; UpdateRects(); } void CEtUIDialog::GetPosition( float &fX, float &fY ) { fX = GetXCoord(); fY = GetYCoord(); } void CEtUIDialog::SetPosition( float fX, float fY ) { m_DlgInfo.DlgCoord.fX = fX; m_DlgInfo.DlgCoord.fY = fY; UpdateRects(); } CEtUIControl *CEtUIDialog::GetControlAtPoint( float fX, float fY ) { CEtUIControl *pControl(NULL); for( int i=(int)m_vecControl.size()-1; i>=0; i-- ) { pControl = m_vecControl[i]; if (pControl && ( pControl->IsInside( fX, fY ) ) && ( pControl->IsShow() ))//( pControl->IsEnable() ) ) // commented by kalliste 090824 { return pControl; } } return NULL; } void CEtUIDialog::SetTemplate( int nIndex, CEtUITemplate &Template ) { ( *m_vecUITemplate[ nIndex ] ) = Template; int i; for( i = 0; i < ( int )m_vecControl.size(); i++ ) { if( m_vecControl[ i ]->GetTemplateIndex() == nIndex ) { SUIControlProperty *pProperty = m_vecControl[ i ]->GetProperty(); m_vecControl[ i ]->Initialize( pProperty ); } } } int CEtUIDialog::AddTemplate( CEtUITemplate &Template ) { CEtUITemplate *pTemplate; pTemplate = new CEtUITemplate(); (*pTemplate) = Template; m_vecUITemplate.push_back( pTemplate ); return ( int )m_vecUITemplate.size() - 1; } void CEtUIDialog::DeleteTemplate( int nIndex ) { ASSERT( nIndex >= 0 && nIndex < (int)m_vecUITemplate.size() ); delete m_vecUITemplate[ nIndex ]; m_vecUITemplate.erase( m_vecUITemplate.begin() + nIndex ); } void CEtUIDialog::DeleteAllTemplate() { SAFE_DELETE_PVEC( m_vecUITemplate ); } float CEtUIDialog::GetFontHeight( int &nFontSetIndex, int nFontHeight ) { SFontInfo FontInfo; CEtFontMng::GetInstance().GetFontInfo( nFontSetIndex, nFontHeight, FontInfo ); return FontInfo.nFontHeight / GetScreenHeight(); } //ID3DXFont *CEtUIDialog::GetFont( int &nFontSetIndex, int nFontHeight ) //{ // SFontInfo FontInfo; // CEtFontMng::GetInstance().GetFontInfo( nFontSetIndex, nFontHeight, FontInfo ); // // return FontInfo.pFont; //} const wchar_t* CEtUIDialog::GetUIString( int nCategoryID, int nIndex ) { if( xml::IsValid() ) { return xml::GetString( nCategoryID, nIndex ); } return NULL; } bool CEtUIDialog::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { m_hWnd = hWnd; // Note : ´ÙÀ̾ó·Î±×°¡ º¸ÀÌÁö ¾Ê°Å³ª ¸Þ¼¼Áö¸¦ ÀÚ½Ä À©µµ¿ì·Î º¸³¾ Çʿ䰡 ¾ø´Ù¸é return // if( !m_bShow && !m_bPassMessageToChild && !m_bAcceptInputMsgWhenHide ) { return false; } else { #ifdef CHECK_DIALOG_CRASH // ÀÌ¹Ì ±úÁøÃ¤·Î µé¾î¿À·Á³ª. strcpy_s( g_szCurMsgProcDialog, 256, m_strDialogFileName.c_str() ); #endif std::list< CEtUIDialog* >::reverse_iterator iter; // Note : ¸ð´ÞÀ» °¡Áö°í ÀÖ°í ÇöÀç º¸ÀÌ´Â »óŶó¸é ¸ð´ÞÀ» ó¸®ÇÑ´Ù. // if( !m_listChildModalDialog.empty() ) { iter = m_listChildModalDialog.rbegin(); if( iter != m_listChildModalDialog.rend() ) { if( *iter != NULL ) { if( (*iter)->IsShow() ) { (*iter)->MsgProc( hWnd, uMsg, wParam, lParam ); // ÆÄƼ»ý¼ºÀ̸§ÀÔ·ÂâÀÌ CHILD_MODALÀε¥, // ÀÌ ÀÔ·Ââ¿¡¼­¸¸ ĵµðµ¥ÀÌÆ®¿¡¼­ ¼±ÅÃÇÑ Áß¹®ÀÌ ÀԷ¾ȵǴ Çö»óÀÌ ³ªÅ¸³µ´Ù. // ¿ø·¡ Äڵ尡 MsgProcÈ£Ãâ ÈÄ ¹Ù·Î return trueÇÏ´Â Äڵ忴´Âµ¥, // ¿¹»ó¿¡´Â ¿©±â¼­ GCS_RESULTSTR¸¦ °¡Áø Msg°¡ µðÆúÆ®ÇÁ·Î½ÃÀú·Î Àü´ÞÀÌ ¾ÈµÇ¼­, // ¿ÜºÎIME¿¡°Ô °¡Áö ¸øÇß°í, ±× °á°ú ĵµðµ¥ÀÌÆ®¿¡¼­ ¼±ÅÃµÈ Áß¹®±ÛÀÚ°¡ ¿ÜºÎIME·ÎºÎÅÍ ¿Í¾ßÇϴµ¥(wm_char¸Þ¼¼Áö·Î) // ÀÌ°Ô ¾È¿Í¼­ ±ÛÀÚ°¡ ¾ÈÂïÇû´ø °Í °°´Ù. // // ±×·¡¼­ ¾Æ·¡ s_bRESULTSTR_NotSendComp¸¦ »ç¿ëÇØ ĵµðµ¥ÀÌÆ®°¡ ¶¹´ÂÁö¸¦ È®ÀÎ ÈÄ // ¸¸¾à ¶¸´Ù¸é, ÇØ´ç ¸Þ¼¼Áö¸¦ ¸®ÅÏÇÏÁö ¾Ê°í, ±×³É Èê·Áº¸³» µðÆúÆ®ÇÁ·Î½ÃÀú·Î °¡µµ·Ï ÇϰڴÙ. // _CH´Â EtInterface ´ÜÀ̶ó »ç¿ëÇÏÁö ¸øÇÑ´Ù. if( CEtUIIME::s_bRESULTSTR_NotSendComp == false ) return true; else { if( (uMsg == WM_IME_COMPOSITION) && ((lParam & GCS_COMPSTR) || (lParam & GCS_RESULTSTR)) ) { } else return true; } } } else { _ASSERT(0&&"CEtUIDialog::MsgProcÇÔ¼ö ¾È Modal-iterator Áß¿¡ NULL ÀÖ½À´Ï´Ù!"); } } } iter = m_listChildDialog.rbegin(); for( ; iter != m_listChildDialog.rend(); ++iter ) { if( *iter == NULL ) { _ASSERT(0&&"CEtUIDialog::MsgProcÇÔ¼ö ¾È iterator Áß¿¡ NULL ÀÖ½À´Ï´Ù!"); continue; } // ÇÚµéÀ» Á÷Á¢ ³Ö¾îÁÖ´Â ÀÌÀ¯´Â, // IME¸¦ °¡Áø Child´ÙÀ̾ó·Î±×¸¦ Show(true)ÇÏ´Â °Í°ú µ¿½Ã¿¡ IME¿¡ Focus󸮸¦ ÇÒ °æ¿ì, // m_hWnd°ªÀÌ NULLÀÎä·Î CEtUIIMEEditBox::Focus°¡ È£ÃâµÇ°Ô µÈ´Ù. // À̶§ ºÎ¸ðÇڵ鰪ÀÌ NULLÀ̸鼭 IME-EnableÇÏ´Â ±â´ÉÀÌ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê°ÔµÇ¾î, // ¿­¾ú´ø âÀ» ´Ý°í ´Ù½Ã ¿­¾î IME¿¡ Focus¸¦ Á༭ ÀÔ·ÂÇØ¾ß¸¸ Çß´Ù. // ±×·¡¼­ ÀÌ·¸°Ô Á÷Á¢ À©µµÇÚµéÀ» ³Ö¾îÁÖ±â·Î ÇÑ´Ù. // // Child_ModalÀÏ °æ¿ì¿¡µµ Child¸®½ºÆ®¿£ µé¾îÀÖÀ¸´Ï Child_Modal¿¡ ´ëÇØ µû·Î ó¸®ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. (*iter)->SetHWnd( hWnd ); if( (*iter)->MsgProc( hWnd, uMsg, wParam, lParam ) ) { return true; } } } if( IsUsableFocusControl() ) { if( focus::MsgProc( uMsg, wParam, lParam ) ) { return true; } } // ÀÏ¹Ý ¹öưÀ» ´©¸¥ »óÅ¿¡¼­ ¸ð´ÞâÀÌ ¿­¸®¸é(µå³× ÇïÇÁâ °°Àº °æ¿ì) ÇØ´ç ¹öưÀÇ Pressed »óŰ¡ °è¼Ó À¯ÁöµÇ¹ö¸°´Ù. // µüÈ÷ ó¸®ÇÒ¸¸ÇÑ Àû´çÇÑ °÷ÀÌ ¾ø¾î¼­ ¿ì¼± ¿©±â¼­ ó¸®Çϵµ·Ï ÇÑ´Ù. // ReleaseControlÀ» È£ÃâÇÏ´Â °Íº¸´Ü, Pressed¸¦ Ãë¼ÒÇÑ´Ù´øÁö µîÀÇ ÀýÂ÷¸¸ ÇÏ´Â°Ô ´õ ³ªÀ» °Å °°¾Æ OnReleaseControlÇÔ¼ö¸¦ È£ÃâÇϱâ·Î ÇÑ´Ù. if( m_emDialogType == UI_TYPE_MODAL && focus::IsEnable() && focus::GetParent() != this && IsChildDialog( focus::GetParent() ) == false ) focus::OnReleaseControl(); switch( uMsg ) { case WM_SIZE: case WM_MOVE: { POINT pt = { -1, -1 }; float fMouseX, fMouseY; PointToFloat( pt, fMouseX, fMouseY ); OnMouseMove( fMouseX, fMouseY ); } break; case WM_ACTIVATEAPP: if( IsUsableFocusControl() ) { if( wParam ) { focus::SetFocus(); } else { //s_pFocusControl->Focus( false ); } } break; case WM_KEYDOWN: case WM_SYSKEYDOWN: case WM_KEYUP: case WM_SYSKEYUP: { if( IsUsableFocusControl() ) { if( focus::HandleKeyboard( uMsg, wParam, lParam ) ) { return true; } } if( uMsg == WM_KEYDOWN ) { bool bIsFocusEditBox = false; if( focus::IsValid() ) { if( focus::GetType() == UI_CONTROL_EDITBOX || focus::GetType() == UI_CONTROL_IMEEDITBOX || focus::GetType() == UI_CONTROL_LINE_EDITBOX || focus::GetType() == UI_CONTROL_LINE_IMEEDITBOX ) bIsFocusEditBox = true; } if( !bIsFocusEditBox ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( !m_vecControl[i]->IsShow() || !m_vecControl[i]->IsEnable() ) continue; int nHotKey = m_vecControl[i]->GetHotKey(); SHORT keyState = GetKeyState( nHotKey ); // Note : ۸¦ ¿¬¼ÓÀ¸·Î ´©¸£´Â °ÍÀ» Ã¼Å©ÇØ¼­ 󸮵ÇÁö ¾Êµµ·Ï ÇÑ´Ù. // ÇÏÁö¸¸ ´Ù¸¥ µÎ°³ÀÇ Å°¸¦ ¿¬¼ÓÀ¸·Î ´©¸£¸é üũµÇÁö ¾Ê´Â´Ù. ¼öÁ¤ÇØ¾ß ÇÒµí... // if( keyState&0x80 ) { // °í´ë ¹ö±×°¡ Çϳª ÀÖ¾ú´ø °Å °°Àºµ¥, ¾Æ¹«¸® ã¾ÆºÁµµ À߸øµÈ Á¡À» ¸øÃ£°Ú´Ù. // ÀçÇö°úÁ¤Àº ´ÙÀ½°ú °°´Ù. // ¿¡µ÷¹Ú½º °¡Áö°í Àִ âÀ» ¿­¾î ƯÁ¤Å°¸¦ ÀÔ·ÂÇÑ´Ù.(¿¹, ÆÄƼ»ý¼ºÃ¢À» ¿¬ÈÄ ÆÄƼÀ̸§ ÀԷ¿¡´Ù°¡ p۸¦ ´­·¯ ÀÔ·Â) // p۸¦ 2ȸ ´©¸¥ ÈÄ Esc·Î ´Ý°í ´Ù½Ã p¸¦ ´©¸£¸é ij¸¯½ºÅ×ÀÌÅͽºÃ¢ ´ÜÃà۰¡ ÀÛµ¿Çϸ鼭 ½ºÅ×ÀÌÅͽºÃ¢ÀÌ ¿­¸°´Ù. // ±×·±µ¥ 3ȸ ´©¸¥ ÈÄ Esc·Î ´Ý°í ´Ù½Ã p¸¦ ´©¸£¸é ¹Ù·Î ¾È¶ß°í Çѹø ´õ ´­·¯¾ß ¶á´Ù. // Á¤¸» ÀÌ»óÇÑ°Ç ÀÌ°Ô p¸¦ ´©¸¥ Ƚ¼ö°¡ Áõ°¡µÉ¶§¸¶´Ù ¹ø°¥¾Æ°¡¸é¼­(0,2,4,6..Àº Á¤»ó, 1,3,5´Â Çѹø ´õ ´­·¯¾ß ¿­¸²) »óŰ¡ ¹Ù²ï´Ù´Â°Å´Ù. // ¾Æ¹«¸® ã¾ÆºÁµµ Editbox¿¡ ¹ø°¥¾Æ°¡¸é¼­ ¹º°¡ ó¸®ÇÑ°Ô ¾ø´Â°Åº¸¸é, // ¾Æ·¡ ÇÖŰó¸® ºÎºÐ Áß GetKeyState·Î »óÅ ¾ò¾î¿Í °è¼Ó ´©¸£°í ÀÖ´Â °Å ¸·´Â ó¸®ÇÏ´Â ¾Æ·¡°¡ °¡Àå ÀǽÉÀûÀºµ¥, // if( (m_nHotKey != nHotKey) || (m_HotKeyState != keyState) ) Áß m_HotKeyState != keyState ºñ±³¹®. // ±×·¸´Ù°í Áö±Ý¿Í¼­ ´Ù¸¥ °É·Î ±³Ã¼Çϱ⵵ ¾Ö¸ÅÇÑ »óȲÀÌ´Ù.. // // óÀ½¿¡´Â Show-HideµÉ¶§ m_HotKeyState¸¦ ÃʱâÈ­ÇÏ´Â°Ô ±âº»ÀûÀ¸·Î ÀÖÀ¸´Ï, ºÎ¸ð,ÀڽĵéÀ» ã¾Æ¼­ ´Ù°°ÀÌ ÃʱâÈ­ÇÒ±î Çߴµ¥, // ´ÜÃàŰ·Î ¾Æ¿¹ °ü°è¾ø´Â ´Ù¸¥ âÀ» ¿­¶§°¡ À־ ÀÌ ¹æ¹ýÀº ÅëÇÏÁö ¾Ê¾Ò´Ù. // ±×·¡¼­.. ÁøÂ¥ ÇÊ¿äÇÑ °÷¿¡¼­ °­Á¦·Î ÇØÁ¦ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇϱâ·Î ÇÑ´Ù. if( (m_nHotKey != nHotKey) || (m_HotKeyState != keyState) ) { m_vecControl[i]->OnHotkey(); m_HotKeyState = keyState; m_nHotKey = nHotKey; return true; } } } } } if( uMsg == WM_KEYDOWN ) { if( !focus::IsValid() ) break; switch( wParam ) { case VK_RIGHT: case VK_DOWN: return OnCycleFocus( true ); case VK_LEFT: case VK_UP: return OnCycleFocus( false ); case VK_TAB: return OnCycleFocus( ( ( GetKeyState( VK_SHIFT ) & 0x8000 ) == 0 ) ); } } } break; } POINT MousePoint; float fMouseX, fMouseY; MousePoint.x = short( LOWORD( lParam ) ); MousePoint.y = short( HIWORD( lParam ) ); PointToFloat( MousePoint, fMouseX, fMouseY ); switch( uMsg ) { case WM_MOUSEMOVE: { s_fScreenMouseX = MousePoint.x / GetScreenWidth(); s_fScreenMouseY = MousePoint.y / GetScreenHeight(); OnMouseMove( fMouseX, fMouseY ); } case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: case WM_XBUTTONDOWN: case WM_XBUTTONUP: case WM_LBUTTONDBLCLK: case WM_MBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_XBUTTONDBLCLK: case WM_MOUSEWHEEL: { if( (uMsg != WM_MOUSEMOVE) && (uMsg != WM_MOUSEWHEEL) ) { g_pFocusDialog = this; } if( IsUsableFocusControl() ) // Focus Control º¸´Ù GetControlAtPoint ¸¦ ¿ì¼±½ÃÇÑ´Ù.... // (Äù½ºÆ® TreeCtrl ¿¡ üũ¹Ú½º¸¦ ¿Ã¸®±âÀ§ÇÔ) by realgaia 091215 { if( focus::HandleMouse( uMsg, fMouseX, fMouseY, wParam, lParam ) ) { return true; } } CEtUIControl* pControl = GetControlAtPoint( fMouseX, fMouseY ); if (pControl && pControl->IsShow()) //&& pControl->IsEnable() ) // commented by kalliste 090824 { if( pControl->HandleMouse( uMsg, fMouseX, fMouseY, wParam, lParam ) ) { return true; } else { //if( IsUsableFocusControl() ) // Focus Control À» GetControlAtPoint ´ÙÀ½¿¡ ó¸®ÇÑ´Ù.... by realgaia 091215 //{ // if( focus::HandleMouse( uMsg, fMouseX, fMouseY, wParam, lParam ) ) // { // return true; // } //} } } else { if( uMsg == WM_LBUTTONDOWN ) { if( focus::IsSameParent(this) ) { focus::ReleaseControl(); } } } if( IsMouseInDlg() && !GetCapture() ) { // Note : ¾ÕÂÊ Ã¢¿¡ À̺¥Æ® ¹ß»ý½Ã µÚÂÊâÀ¸·Î ¸Þ¼¼Áö Àü´ÞÀ» // ÇÏÁö ¾Ê´Â´Ù. âÀÇ ¼ø¼­°¡ Áß¿äÇÏ´Ù. // return true; } #define MOUSEOVER_CONTROL_OUTSIDE_DLG #ifdef MOUSEOVER_CONTROL_OUTSIDE_DLG else { // ¸¶¿ì½º¹«ºê Áß¿¡ 󸮵Ǵ ÄÁÆ®·ÑÀÌ ÀÖ´Ù¸é, // (ÅØ½ºÃ³ ÄÁÆ®·ÑÀº Á¦¿ÜÇϱâ·Î Çß´Ù. 2ÀÇ ½Â¼ö ¸ÂÃß´Â °Í¶§¹®¿¡ ´ÙÀ̾ó·Î±× ¿µ¿ª ¹þ¾î³ª´Â°Ô ¸¹±â ¶§¹®¿¡. // ±×¸®°í Á¦´ë·Î ÇÏ·Á¸é, GetControlAtPoint ÀÌ ÇÔ¼ö·Î pControl¾òÀ»¶§ºÎÅÍ ÅØ½ºÃ³ÄÁÆ®·Ñ »©°í °Ë»çÇØ¾ßÇϴµ¥, // ÀÌ·¸°Ô±îÁö ÇÏ´Â°Ç Á» ¿À¹öÀΰŠ°°¾Æ¼­ ¿ì¼±Àº ±×³É ¾Æ·¡Ã³·³ ó¸®Çϱâ·Î ÇϰڴÙ.) if( uMsg == WM_MOUSEMOVE && pControl && pControl->GetProperty()->UIType != UI_CONTROL_TEXTURECONTROL ) return true; } #endif } break; } return false; } bool CEtUIDialog::OnMouseMove( float fX, float fY ) { m_fMouseX = fX; m_fMouseY = fY; SUICoord dlgCoord(m_DlgInfo.DlgCoord); dlgCoord.SetPosition( GetXCoord(), GetYCoord() ); if( dlgCoord.IsInside( s_fScreenMouseX, s_fScreenMouseY ) ) { m_bMouseInDialog = true; // Note : ¸¶¿ì½º Æ÷ÀÎÆ®¿¡ À§Ä¡ÇÑ ÄÁÆ®·ÑÀ» ¾ò´Â´Ù. // CEtUIControl *pControl = GetControlAtPoint( m_fMouseX, m_fMouseY ); if( pControl == NULL ) { ReleaseMouseEnterControl(); return true; } else if( pControl == s_pMouseEnterControl ) { return true; } SetMouseEnterControl( pControl ); return true; } else { #ifdef MOUSEOVER_CONTROL_OUTSIDE_DLG m_bMouseInDialog = false; CEtUIControl *pControl = GetControlAtPoint( m_fMouseX, m_fMouseY ); if( pControl == NULL ) { ReleaseMouseEnterControl(); return false; } else if( pControl == s_pMouseEnterControl ) { return true; } SetMouseEnterControl( pControl ); return true; #else m_bMouseInDialog = false; ReleaseMouseEnterControl(); return false; #endif } return false; } void CEtUIDialog::ProcessCommand( UINT nCommand, bool bTriggeredByUser, CEtUIControl *pControl, UINT uMsg ) { if( ( nCommand == EVENT_EDITBOX_STRING ) && m_pDefaultControl ) { if( m_pDefaultControl->IsShow() && m_pDefaultControl->IsEnable() ) m_pDefaultControl->OnHotkey(); } if( nCommand == EVENT_EDITBOX_ESCAPE ) { for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { if( !m_vecControl[i]->IsShow() || !m_vecControl[i]->IsEnable() ) continue; if( m_vecControl[i]->GetHotKey() == VK_ESCAPE ) { m_vecControl[i]->OnHotkey(); break; } } } if( pControl->IsShow() && pControl->IsEnable() ) { if( m_pCallback ) { // ·Îµù½Ã ºê·¹ÀÌÅ©½Ã ¿©±â¼­ Å©·¡½¬..m_pCallBack ÀÌ¹Ì Áö¿öÁü. m_pCallback->OnUICallbackProc( m_nDialogID, nCommand, pControl, uMsg ); } } } void CEtUIDialog::Process( float fElapsedTime ) { CEtUIControl *pControl(NULL); int nVecCtlSize = ( int )m_vecControl.size(); for( int i = 0; i < nVecCtlSize; i++ ) { pControl = m_vecControl[i]; if (pControl) pControl->Process( fElapsedTime ); } if( m_FadeMode != FadeModeEnum::None ) { if( !IsShow() ) FadeOut( fElapsedTime ); else FadeIn( fElapsedTime ); } std::list::iterator iter = m_listChildDialog.begin(); for( ; iter != m_listChildDialog.end(); ++iter ) { if( *iter == NULL ) { _ASSERT(0&&"CEtUIDialog::ProcessÇÔ¼ö ¾È iterator Áß¿¡ NULL ÀÖ½À´Ï´Ù!"); continue; } (*iter)->Process( fElapsedTime ); } ProcessMemoryOptimize( fElapsedTime ); RefreshChildRenderPriority(); } #ifndef _FINAL_BUILD extern bool g_bPauseMode; #endif void CEtUIDialog::ProcessMemoryOptimize( float fElapsedTime ) { #ifndef _FINAL_BUILD if( g_bPauseMode ) return; #endif bool bDraging = false; if( drag::IsValid() && drag::GetControl()->GetParent() == this ) { bDraging = true; } if( ( IsShow() ) || bDraging || IsAllowRender() ) { if( m_fLastShowDelta < 10.f ) m_fLastShowDelta = 10.f; m_fLastShowDelta += fElapsedTime; if( m_fLastShowDelta > 30.f ) m_fLastShowDelta = 30.f; } else m_fLastShowDelta -= fElapsedTime; if( m_fLastShowDelta <= 0.f ) { FreeDialogTexture(); } } void CEtUIDialog::FreeDialogTexture() { if( !m_bLoadedTexture ) return; if( m_hDlgTexture && m_hDlgTexture->GetRefCount() == 1 ) s_nDialogTextureSize -= m_hDlgTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hDlgTexture ); if( m_hTexture && m_hTexture->GetRefCount() == 1 ) s_nDialogTextureSize -= m_hTexture->GetFileSize(); SAFE_RELEASE_SPTR( m_hTexture ); CEtResource::FlushWaitDelete( RT_TEXTURE ); m_bLoadedTexture = false; std::list::iterator iter = m_listChildDialog.begin(); for( ; iter != m_listChildDialog.end(); ++iter ) { (*iter)->FreeDialogTexture(); } CEtUIControl *pControl(NULL); int nVecCtlSize = ( int )m_vecControl.size(); for( int i = 0; i < nVecCtlSize; i++ ) { pControl = m_vecControl[i]; SAFE_RELEASE_SPTR( pControl->GetTemplate().m_hTemplateTexture ); } } void CEtUIDialog::LoadDialogTexture() { if( m_bLoadedTexture ) return; // ÅÛÇø´ ÅØ½ºÃ³ ¾²¸é¼­ ÀÌÁ¦ ÇÊ¿ä¾ø´Ù. ÄÚµå´Â ´Ù °íÄ¥ ÇÊ¿ä¾øÀÌ À̰ŠÇÑÁÙ ÁÖ¼®Ã³¸®ÇÏ¸é ³¡. // ¼Ò½º Á¤¸®´Â ¾ÈÁ¤È­µÈ ÈÄ¿¡ ÇØ¾ß°Ú´Ù. //m_hTexture = LoadResource( m_DlgInfo.szUITexturename, RT_TEXTURE, true ); if( m_hTexture && m_hTexture->GetRefCount() == 1 ) s_nDialogTextureSize += m_hTexture->GetFileSize(); m_hDlgTexture = LoadResource( m_DlgInfo.szDlgTextureName, RT_TEXTURE, true ); if( m_hDlgTexture && m_hDlgTexture->GetRefCount() == 1 ) s_nDialogTextureSize += m_hDlgTexture->GetFileSize(); m_bLoadedTexture = true; std::list::iterator iter = m_listChildDialog.begin(); for( ; iter != m_listChildDialog.end(); ++iter ) { (*iter)->LoadDialogTexture(); } CEtUIControl *pControl(NULL); int nVecCtlSize = ( int )m_vecControl.size(); for( int i = 0; i < nVecCtlSize; i++ ) { pControl = m_vecControl[i]; pControl->GetTemplate().OnLoaded(); } } bool CEtUIDialog::IsAllowRender() { if( !IsShow() ) { switch( m_FadeMode ) { case FadeModeEnum::None: return false; case FadeModeEnum::CancelRender: if( ( m_renderDlgColor.dwCurrentColor >> 24 ) == 0 ) return false; break; case FadeModeEnum::AllowRender: return true; } } return true; } void CEtUIDialog::RefreshChildRenderPriority() { for( DWORD i=0; i::iterator iter = std::find( m_listChildDialog.begin(), m_listChildDialog.end(), pDlg ); if ( iter != m_listChildDialog.end() ) { CEtUIDialog* pDlg = *iter; if (bTail) m_listChildDialog.push_back(pDlg); else m_listChildDialog.push_front(pDlg); m_listChildDialog.erase(iter); } } m_vecChildRenderPriorityInfo.clear(); } void CEtUIDialog::SetChildRenderPriority(CEtUIDialog* pDlg, bool bTail) { if( !pDlg ) return; m_vecChildRenderPriorityInfo.push_back( std::make_pair( pDlg, bTail ) ); } void CEtUIDialog::Render( float fElapsedTime ) { if( !IsAllowRender() ) return; SUICoord DlgCoord(m_DlgInfo.DlgCoord), DlgUVCoord(0.0f, 0.0f, 1.0f, 1.0f); DlgCoord.fX = 0.0f; DlgCoord.fY = 0.0f; if( m_hDlgTexture ) { if( (m_DlgInfo.nFrameLeft > 0) || (m_DlgInfo.nFrameRight > 0) || (m_DlgInfo.nFrameTop > 0) || (m_DlgInfo.nFrameBottom > 0) ) { DrawDlgFrame(); } else { DrawSprite( m_hDlgTexture, DlgUVCoord, m_renderDlgColor.dwCurrentColor, DlgCoord ); } } else if( (m_renderDlgColor.dwCurrentColor & 0xFF000000) != 0 ) { DrawRect( DlgCoord, m_renderDlgColor.dwCurrentColor ); } // Note : µð¹ö±ë ÇÒ¶§ ¾²¼¼¿ä^^ // // DrawRect( DlgCoord, EtInterface::debug::BLUE ); // Note : ÀÚ½ÅÀÇ ÄÁÆ®·ÑµéÀ» ·£´õÇÑ´Ù. // CEtUIControl *pControl(NULL); int nVecCtlSize = ( int )m_vecControl.size(); for( int i = 0; i < nVecCtlSize; i++ ) { pControl = m_vecControl[i]; if( !pControl ) continue; pControl->Render( fElapsedTime ); } // ÀÚ½Ä À©µµ¿ìµéÀ» ·£´õÇÑ´Ù. // bool bRenderMostFocusDlg = false; std::list::iterator iter = m_listChildDialog.begin(); for( ; iter != m_listChildDialog.end(); ++iter ) { if( *iter == NULL ) { //_ASSERT(0&&"CEtUIDialog::RenderÇÔ¼ö ¾È iterator Áß¿¡ NULL ÀÖ½À´Ï´Ù!"); continue; } (*iter)->Render( fElapsedTime ); } } void CEtUIDialog::DrawDlgFrame() { int nFrameSize = ( int )m_vecDlgFrameElement.size(); for( int i = 0; i < nFrameSize; i++ ) { DrawSprite( m_hDlgTexture, m_vecDlgFrameElement[ i ].UVCoord, m_renderDlgColor.dwCurrentColor, m_vecDlgFrameCoord[ i ] ); } } void CEtUIDialog::CalcTextRect( LPCWSTR szText, SUIElement *pElement, SUICoord &CalcCoord, int nCount, DWORD dwFontFormat ) { ASSERT( pElement&&"CEtUIDialog::CalcTextRect, pElement is NULL!" ); ASSERT( pElement->nFontIndex>=0&&"CEtUIDialog::CalcTextRect" ); if( dwFontFormat == 0xffffffff ) { dwFontFormat = pElement->dwFontFormat; } dwFontFormat |= DT_WORDBREAK; CEtFontMng::GetInstance().CalcTextRect( pElement->nFontIndex, pElement->nFontHeight, szText, dwFontFormat, CalcCoord, nCount ); CalcCoord.fWidth *= GetScreenWidthRatio(); CalcCoord.fHeight *= GetScreenHeightRatio(); } void CEtUIDialog::CalcTextRect( LPCWSTR szText, int fontIndex, int fontHeight, SUICoord &CalcCoord, DWORD dwFontFormat, bool bUseCache ) { //ASSERT( pElement&&"CEtUIDialog::CalcTextRect, pElement is NULL!" ); ASSERT( fontHeight>=0&&"CEtUIDialog::CalcTextRect" ); dwFontFormat |= DT_WORDBREAK; CEtFontMng::GetInstance().CalcTextRect( fontIndex, fontHeight, szText, dwFontFormat, CalcCoord, -1, bUseCache ); CalcCoord.fWidth *= GetScreenWidthRatio(); CalcCoord.fHeight *= GetScreenHeightRatio(); } void CEtUIDialog::DrawDlgText( LPCWSTR szText, SUIElement *pElement, DWORD dwFontColor, const SUICoord &Coord, int nCount, DWORD dwFontFormat, bool bClip, float ZValue, DWORD dwBgColor, int nBorderFlag ) { ASSERT( pElement&&"CEtUIDialog::DrawDlgText, pElement is NULL!" ); ASSERT( pElement->nFontIndex>=0&&"CEtUIDialog::DrawDlgText" ); if( !szText || szText[0] == '\0' ) return; SUICoord ScreenCoord; //blondy if( m_DlgInfo.bLockScalingByResolution ) { ScreenCoord.fX = Coord.fX + GetXCoord() ; ScreenCoord.fY = Coord.fY + GetYCoord() ; ScreenCoord.fWidth = Coord.fWidth ; ScreenCoord.fHeight = Coord.fHeight ; }else { ScreenCoord.fX = ( Coord.fX + GetXCoord() ) / GetScreenWidthRatio(); ScreenCoord.fY = ( Coord.fY + GetYCoord() ) / GetScreenHeightRatio(); ScreenCoord.fWidth = Coord.fWidth / GetScreenWidthRatio(); ScreenCoord.fHeight = Coord.fHeight / GetScreenHeightRatio(); } if( dwFontFormat == 0xffffffff ) { dwFontFormat = pElement->dwFontFormat; } if( !bClip ) { dwFontFormat |= DT_WORDBREAK; } //if( pElement->bShadowFont ) //{ // SUICoord ShadowCoord(ScreenCoord); // ShadowCoord.fX += 1.0f / GetEtDevice()->Width(); // ShadowCoord.fY += 1.0f / GetEtDevice()->Height(); // CEtFontMng::GetInstance().DrawTextW( pElement->nFontIndex, pElement->nFontHeight, szText, pElement->ShadowFontColor.dwCurrentColor, dwFontFormat, ShadowCoord, nCount ); //} D3DXCOLOR textureColor( dwFontColor ); D3DXCOLOR shadowColor( pElement->ShadowFontColor.dwCurrentColor ); if( textureColor.a != 1.0f ) shadowColor.a = shadowColor.a * textureColor.a; SFontDrawEffectInfo Info; Info.nDrawType = pElement->nDrawType; Info.nWeight = pElement->nWeight; Info.fAlphaWeight = pElement->fAlphaWeight; Info.fGlobalBlurAlphaWeight = pElement->fGlobalBlurAlphaWeight; Info.dwFontColor = dwFontColor; Info.dwEffectColor = shadowColor; //pElement->ShadowFontColor.dwColor[UI_STATE_NORMAL]; CEtFontMng::GetInstance().DrawTextW( pElement->nFontIndex, pElement->nFontHeight, szText, dwFontFormat, ScreenCoord, nCount, Info, true, ZValue , dwBgColor, nBorderFlag ); } void CEtUIDialog::DrawSprite( EtTextureHandle hTexture, SUICoord &UVCoord, DWORD dwUIColor, SUICoord &Coord, float fRotate, float ZValue ) { if( UVCoord.fWidth == 0.0f ) return; if( ( ( dwUIColor & 0xff000000 ) == 0 ) || ( !hTexture ) ) return; if( !hTexture || !hTexture->IsReady() ) return; SUICoord ScreenCoord; ScreenCoord.SetPosition( ( Coord.fX + GetXCoord() ) / GetScreenWidthRatio(), ( Coord.fY + GetYCoord() ) / GetScreenHeightRatio() ); ScreenCoord.SetSize( Coord.fWidth / GetScreenWidthRatio(), Coord.fHeight / GetScreenHeightRatio() ); CEtSprite::GetInstance().DrawSprite( ( EtTexture * )hTexture->GetTexturePtr(), hTexture->Width(), hTexture->Height(), UVCoord, dwUIColor, ScreenCoord, fRotate, ZValue ); } void CEtUIDialog::DrawSprite( SUICoord &UVCoord, DWORD dwUIColor, SUICoord &Coord, float fRotate, float ZValue ) { DrawSprite( m_hTexture, UVCoord, dwUIColor, Coord, fRotate, ZValue ); } void CEtUIDialog::DrawRect( SUICoord &Coord, DWORD dwColor ) { if( ( Coord.fWidth <= 0.0f ) && ( Coord.fHeight <= 0.0f ) ) { return; } SUICoord ScreenCoord = DlgCoordToScreenCoord( Coord ); CEtSprite::GetInstance().DrawRect( ScreenCoord, dwColor ); } SUICoord CEtUIDialog::DlgCoordToScreenCoord( const SUICoord &Coord ) { SUICoord ResultCoord; ResultCoord.fX = ( Coord.fX + GetXCoord() ) / GetScreenWidthRatio(); ResultCoord.fY = ( Coord.fY + GetYCoord() ) / GetScreenHeightRatio(); ResultCoord.fWidth = Coord.fWidth / GetScreenWidthRatio(); ResultCoord.fHeight = Coord.fHeight / GetScreenHeightRatio(); return ResultCoord; } SUICoord CEtUIDialog::ScreenCoordToDlgCoord( SUICoord &Coord ) { SUICoord ResultCoord; ResultCoord.fX = ( Coord.fX * GetScreenWidthRatio() ) - GetXCoord(); ResultCoord.fY = ( Coord.fY * GetScreenHeightRatio() ) - GetYCoord(); ResultCoord.fWidth = Coord.fWidth * GetScreenWidthRatio(); ResultCoord.fHeight = Coord.fHeight * GetScreenHeightRatio(); return ResultCoord; } void CEtUIDialog::UpdateDlgCoord( float fX, float fY, float fWidth, float fHeight ) { m_DlgInfo.DlgCoord.fX += fX; m_DlgInfo.DlgCoord.fY += fY; m_DlgInfo.DlgCoord.fWidth += fWidth; m_DlgInfo.DlgCoord.fHeight += fHeight; UpdateRects(); } bool CEtUIDialog::IsCmdControl( const char *szCmdCtlName ) { ASSERT(szCmdCtlName); return (m_strCmdControlName == szCmdCtlName); } CEtUITemplate *CEtUIDialog::GetTemplate( int nIndex ) { if( nIndex >= (int)m_vecUITemplate.size() ) { CDebugSet::ToLogFile("CEtUIDialog::GetTemplate, nIndex >= (int)m_vecUITemplate.size()"); nIndex = (int)(m_vecUITemplate.size()-1); } return m_vecUITemplate[ nIndex ]; } void CEtUIDialog::FadeIn( float fElapsedTime ) { m_renderDlgColor.BlendEx( UI_STATE_NORMAL, fElapsedTime, 0.2f ); } void CEtUIDialog::FadeOut( float fElapsedTime ) { m_renderDlgColor.BlendEx( UI_STATE_HIDDEN, fElapsedTime, 0.2f ); } void CEtUIDialog::GetMouseMovePoints( float &fMouseX, float &fMouseY ) { fMouseX = m_fMouseX; fMouseY = m_fMouseY; } void CEtUIDialog::ProcessChangeResolution() { for each( CEtUIDialog *pDialog in s_plistDialogBottomMsg ) pDialog->OnChangeResolution(); for each( CEtUIDialog *pDialog in s_plistDialogBottom ) pDialog->OnChangeResolution(); for each( CEtUIDialog *pDialog in s_plistDialogTopMsg ) pDialog->OnChangeResolution(); for each( CEtUIDialog *pDialog in s_plistDialogTop ) pDialog->OnChangeResolution(); for each( CEtUIDialog *pDialog in s_plistDialogFocus ) pDialog->OnChangeResolution(); for each( CEtUIDialog *pDialog in s_plistDialogModal ) pDialog->OnChangeResolution(); for each( CEtUIDialog *pDialog in s_plistDialogMostTop ) pDialog->OnChangeResolution(); // Self¶óµµ ÇØÁÖ´Â°Ô ¸Â´Â°Å °°´Ù.(Self·Î ¸¸µç ¸»Ç³¼±´ÙÀ̾ó·Î±×Çϸ鼭 ÇØÁÖ´Â°Ô ¸Â´Â µí..) for each( CEtUIDialog *pDialog in s_plistDialogSelf ) pDialog->OnChangeResolution(); } void CEtUIDialog::SetForceDialogScale( float fScale ) { s_fDialogScale = fScale; if( CEtFontMng::IsActive() ) { CEtFontMng::GetInstance().OnLostDevice(); CEtFontMng::GetInstance().OnResetDevice(); } ProcessChangeResolution(); } void CEtUIDialog::OnChangeResolution() { UpdateScreen(); UpdateRects(); CEtUIControl *pControl(NULL); for( int i = 0; i < ( int )m_vecControl.size(); i++ ) { pControl = m_vecControl[i]; if( !pControl ) continue; pControl->OnChangeResolution(); } for each( CEtUIDialog *pDialog in m_listChildDialog ) { pDialog->OnChangeResolution(); } for each( CEtUIDialog *pDialog in m_listChildModalDialog ) { pDialog->OnChangeResolution(); } } void CEtUIDialog::SetDlgInfo( SUIDialogInfo &DlgInfo ) { m_DlgInfo = DlgInfo; m_renderDlgColor.dwColor[UI_STATE_NORMAL] = m_DlgInfo.dwDlgColor; m_renderDlgColor.dwCurrentColor = m_DlgInfo.dwDlgColor; UpdateRects(); } void CEtUIDialog::GetDlgInfo( SUIDialogInfo &DlgInfo ) { DlgInfo = m_DlgInfo; } void CEtUIDialog::ShowTooltipDlg( CEtUIControl *pControl, bool bShow, int nStringIndex, DWORD color, bool bPermanent ) { if( bShow ) { s_nTooltipStringIndex = nStringIndex; } if( s_pTooltipDlg ) { s_pTooltipDlg->SetTooltipControl( pControl ); s_pTooltipDlg->SetTooltipInfo(color, bPermanent); s_pTooltipDlg->Show( bShow ); } } void CEtUIDialog::ShowTooltipDlg( CEtUIControl *pControl, bool bShow, const std::wstring &strTooltip, DWORD color, bool bPermanent ) { if( bShow ) { s_strTooltipString = strTooltip; } if( s_pTooltipDlg ) { s_pTooltipDlg->SetTooltipControl( pControl ); s_pTooltipDlg->SetTooltipInfo(color, bPermanent); s_pTooltipDlg->Show( bShow ); } } bool CEtUIDialog::IsTooltipControl(CEtUIControl* pCtrl) { CEtUIControl* ctrl = s_pTooltipDlg->GetTooltipCtrl(); if (s_pTooltipDlg && ctrl) return (pCtrl == ctrl); return false; } void CEtUIDialog::GetScreenMouseMovePoints( float &fMouseX, float &fMouseY ) { fMouseX = s_fScreenMouseX; fMouseY = s_fScreenMouseY; } void CEtUIDialog::UpdateScreen() { // ÀÌ·± ¹æ¹ýÀ¸·Î ó¸®ÇÒ±î Çߴµ¥, Å©°Ô µÎ°¡Áö°¡ °É¸°´Ù. // Çϳª´Â ÆùÆ® 󸮰í, Çϳª´Â ½ºÅ©·Ñ¹Ù°°ÀÌ ¼­ºêÇüÅ·Π°¡Áö´Â °ÍÀÌ´Ù. // ÀÌ µÎ°¡Áö¿¡ ´ëÇÑ Ã³¸®°¡ ³¡³ª¾ß Á¦´ë·Î »ç¿ëÇÒ ¼ö ÀÖÀ» µí ÇÏ´Ù. // from blondy ±×³É ±×·± °Íµé¿¡ ´ëÇÑ Ã³¸®¸¦ ÄÉÀ̽º ¹ÙÀÌ ÄÉÀ̽º·Î ÇØ¾ß µÉµí if( m_DlgInfo.bLockScalingByResolution ) { m_fScreenHeight = DEFAULT_UI_SCREEN_HEIGHT; m_fScreenWidth = DEFAULT_UI_SCREEN_WIDTH; } else { m_fScreenHeight = DEFAULT_UI_SCREEN_HEIGHT * s_fDialogScale; m_fScreenWidth = DEFAULT_UI_SCREEN_WIDTH * s_fDialogScale; } m_fScreenHeight = DEFAULT_UI_SCREEN_HEIGHT * s_fDialogScale; m_fScreenHeightRatio = GetEtDevice()->Height() / m_fScreenHeight; m_fScreenHeightBorder = (m_fScreenHeightRatio - 1.0f) * 0.5f; m_fScreenWidth = DEFAULT_UI_SCREEN_WIDTH * s_fDialogScale; m_fScreenWidthRatio = GetEtDevice()->Width() / m_fScreenWidth; m_fScreenWidthBorder = ( m_fScreenWidthRatio - 1.0f ) * 0.5f; //if( (fWidth/fHeight) >= DEFAULT_UI_SCREEN_RATIO ) //{ // // Note : È­¸é ºñÀ²ÀÌ ±âº» 4:3 ºñÀ²º¸´Ù Å©´Ù¸é ¿ÍÀ̵å·Î Àû¿ëÇÑ´Ù. // // // m_fScreenWidth = fHeight * DEFAULT_UI_SCREEN_RATIO * s_fDialogScale; //} //else //{ // m_fScreenWidth = DEFAULT_UI_SCREEN_WIDTH * s_fDialogScale; //} } void CEtUIDialog::CalcDialogScaleByResolution( int nWidth, int nHeight ) { float fHR = float(nHeight) / DEFAULT_UI_SCREEN_HEIGHT; float fWR = float(nWidth) / DEFAULT_UI_SCREEN_WIDTH; s_fDialogScaleValueVert = ( fHR - 1.0f ) * UI_DIALOG_SCALE_VALUE; if( s_fDialogScaleValueVert < 0.0f ) { s_fDialogScaleValueVert = 0.0f; } s_fDialogScaleValueHori = ( fWR - 1.0f ) * UI_DIALOG_SCALE_VALUE; if( s_fDialogScaleValueHori < 0.0f ) { s_fDialogScaleValueHori = 0.0f; } // ÇØ»óµµ ¹Ù²î¸é UISize ´Ù½Ã ó¸®ÇؾßÇÑ´Ù. SetDialogSize( s_nUISize, nWidth, nHeight ); } void CEtUIDialog::AddChildDialog( CEtUIDialog *pDialog ) { ASSERT(pDialog&&"CEtUIDialog::AddChildDialog"); m_listChildDialog.push_back( pDialog ); } void CEtUIDialog::AddChildModalDialog( CEtUIDialog *pDialog ) { ASSERT(pDialog&&"CEtUIDialog::AddChildModalDialog"); m_listChildModalDialog.push_back( pDialog ); } void CEtUIDialog::DelChildDialog( CEtUIDialog *pDialog ) { ASSERT(pDialog&&"CEtUIDialog::DelChildDialog"); std::list::iterator iter = m_listChildDialog.begin(); for( ; iter != m_listChildDialog.end(); ) { if( (*iter) == pDialog ) { iter = m_listChildDialog.erase( iter ); continue; } ++iter; } } void CEtUIDialog::DelChildModalDialog( CEtUIDialog *pDialog ) { ASSERT(pDialog&&"CEtUIDialog::DelChildModalDialog"); std::list::iterator iter = m_listChildModalDialog.begin(); for( ; iter != m_listChildModalDialog.end(); ) { if( (*iter) == pDialog ) { iter = m_listChildModalDialog.erase( iter ); continue; } ++iter; } } void CEtUIDialog::ShowChildDialog( CEtUIDialog *pDialog, bool bShow ) { if( !pDialog ) return; ASSERT( (pDialog!=this)&&"CEtUIDialog::ShowChildDialog" ); if( pDialog->GetDialogType() == UI_TYPE_CHILD_MODAL ) { ShowChildDialog( m_listChildModalDialog, pDialog, bShow ); } else { ShowChildDialog( m_listChildDialog, pDialog, bShow ); } } void CEtUIDialog::ShowChildDialog( std::list &listDialog, CEtUIDialog *pDialog, bool bShow ) { if( !pDialog ) return; if( listDialog.empty() ) return; CEtUIDialog *pChildDialog(NULL); std::list::iterator iter = listDialog.begin(); for( ; iter != listDialog.end(); ++iter ) { if( (*iter) == pDialog ) { pChildDialog = (*iter); listDialog.erase( iter ); break; // Note : ÀÚ½Ä À©µµ¿ìÀÇ ¾ÆÀ̵ð´Â À¯ÀÏÇÏ´Ù°í °¡Á¤ÇÑ´Ù. } } // Note : ÀÚ½Ä À©µµ¿ìµéÀº ShowÇÒ¶§ ¸®½ºÆ®¿¡¼­ ¼ø¼­¸¦ ¹Ù²ãÁØ´Ù. // °á±¹ ·£´õ¿Í ¸Þ¼¼Áö ó¸® ¼ø¼­°¡ ¹Ù²ï´Ù. // if( pChildDialog ) { // content ´ÙÀ̾ó·Î±×°¡ ½ºÅ³Æ®¸®Ã³·³ °ãÃÄÀÖÀ¸¸é ÀÔ·Â ¸Þ½ÃÁö°¡ ÀÛÀº ´ÙÀ̾ó·Î±×¿¡ ¿ÀÁö ¾Ê±â ¶§¹®¿¡ // CEtUIDialog::ShowChildDialog() ÇÔ¼ö È£Ã⠽ÿ¡ Ã¼Å©ÇØ¼­ Æ÷Ä¿½Ì 󸮽ÿ¡ °¡Àå µÚ¿¡ ¿Àµµ·Ï ¼ÂÆÃÇÕ´Ï´Ù. vector vlpContentDialogs; pChildDialog->GetContentDialog( vlpContentDialogs ); if( false == vlpContentDialogs.empty() ) { for( int i = 0; i < (int)vlpContentDialogs.size(); ++i ) { CEtUIDialog* pContentDialog = vlpContentDialogs.at( i ); list::iterator iterContentDlg = find( listDialog.begin(), listDialog.end(), pContentDialog ); _ASSERT( listDialog.end() != iterContentDlg ); if( listDialog.end() != iterContentDlg ) listDialog.erase( iterContentDlg ); } } // ¸Þ½ÃÁö Àü´ÞÀº °Å²Ù·Î µÇ¹Ç·Î Æ÷Ä¿½Ì µÇ´Â °æ¿ì¿£ ¸Ç µÚ·Î, // ¼û°ÜÁö´Â °æ¿ì¿£ ¸Ç ¾ÕÀ¸·Î ¿Å°ÜÁö´Â ¸ÞÀÎ ´ÙÀ̾ó·Î±×ÀÇ ¹Ù·Î µÚ·Î. if( bShow ) { listDialog.push_back( pChildDialog ); if( false == vlpContentDialogs.empty() ) { for( int i = 0; i < (int)vlpContentDialogs.size(); ++i ) { CEtUIDialog* pContentDialog = vlpContentDialogs.at( i ); listDialog.push_back( pContentDialog ); } } } else { if( false == vlpContentDialogs.empty() ) { for( int i = 0; i < (int)vlpContentDialogs.size(); ++i ) { CEtUIDialog* pContentDialog = vlpContentDialogs.at( i ); listDialog.push_front( pContentDialog ); } } listDialog.push_front( pChildDialog ); } pChildDialog->Show( bShow ); } else { CDebugSet::ToLogFile( "CEtUIDialog::ShowChildDialog, pChildDialog is NULL!" ); } } bool CEtUIDialog::IsChildDialog( const CEtUIDialog *pDialog ) { if( !pDialog ) return false; std::list::iterator iter = m_listChildDialog.begin(); for( ; iter != m_listChildDialog.end(); ++iter ) { if( (*iter) == pDialog ) { return true; } if( (*iter)->IsChildDialog( pDialog ) ) { return true; } } iter = m_listChildModalDialog.begin(); for( ; iter != m_listChildModalDialog.end(); ++iter ) { if( (*iter) == pDialog ) { return true; } if( (*iter)->IsChildDialog( pDialog ) ) { return true; } } return false; } void CEtUIDialog::UpDialogSize() { CalcDialogScaleValue(); if( s_fDialogScaleValueVert <= 0.0f ) return; if( s_fDialogScale == s_fMaxDialogScale ) return; s_fDialogScale += s_fDialogScaleValueVert; if( s_fDialogScale > s_fMaxDialogScale ) { s_fDialogScale = s_fMaxDialogScale; } if( CEtFontMng::IsActive() ) { CEtFontMng::GetInstance().OnLostDevice(); CEtFontMng::GetInstance().OnResetDevice(); } ProcessChangeResolution(); } void CEtUIDialog::DownDialogSize() { CalcDialogScaleValue(); if( s_fDialogScaleValueVert <= 0.0f ) return; if( s_fDialogScale == s_fMinDialogScale ) return; s_fDialogScale -= s_fDialogScaleValueVert; if( s_fDialogScale < s_fMinDialogScale ) { s_fDialogScale = s_fMinDialogScale; } if( CEtFontMng::IsActive() ) { CEtFontMng::GetInstance().OnLostDevice(); CEtFontMng::GetInstance().OnResetDevice(); } ProcessChangeResolution(); } void CEtUIDialog::CalcDialogScaleValue( int nWidth, int nHeight ) { // µðÆúÆ®ÇØ»óµµº¸´Ù ÀÛÀº ÇØ»óµµ ÀÚ²Ù Áö¿øÇÏ·ÁÇÑ´Ù. // ±×·¡¼­ ÀÌ·¸°Ô µðÆúÆ®ÇØ»óµµº¸´Ù ÀÛÀº ÇØ»óµµ ¿À¸é º°µµÀÇ UISizeÁ¶ÀýÀÌ ºÒ°¡´ÉÇϵµ·Ï // °è»êµÈ ±âº» ½ºÄÉÀÏ ±×´ë·Î »ç¿ëÇÑ´Ù. if( nWidth < DEFAULT_UI_SCREEN_WIDTH || nHeight < DEFAULT_UI_SCREEN_HEIGHT ) { s_fMaxDialogScale = s_fDialogScale; s_fMinDialogScale = s_fDialogScale; return; } if( nWidth == 0 && nHeight == 0 ) { nWidth = GetEtDevice()->Width(); nHeight = GetEtDevice()->Height(); } float fHR = float(nHeight) / DEFAULT_UI_SCREEN_HEIGHT; float fWR = float(nWidth) / DEFAULT_UI_SCREEN_WIDTH; s_fMaxDialogScale = min( fHR, fWR ); s_fMinDialogScale = 2.0f - s_fMaxDialogScale; s_fDialogScaleValueVert = (s_fMaxDialogScale - 1.0f) / 2.0f; // ³Ê¹« ÀÛ¾ÆÁö°Ô ÇÏÁö ¸»ÀÚ. s_fMinDialogScale = (s_fMinDialogScale + 3.0f) / 4.0f; } // À©µµ¿ìÀÇ ÃÖ´ëÈ­¹öư¶§¹®¿¡ ÇØ»óµµ¸¦ ÀÎÀÚ·Î ÇÊ¿ä·Î ÇÑ´Ù. void CEtUIDialog::SetDialogSize( int nStep, int nWidth, int nHeight ) { if( nStep < 1 || nStep > 4 ) return; if( nWidth == 0 && nHeight == 0 ) { nWidth = GetEtDevice()->Width(); nHeight = GetEtDevice()->Height(); } // ´ÙÀ̾ó·Î±× »çÀÌÁî °è»êÇÏ´Â°Ô Çϵµ Èð¾îÁ®À־ ÀÌ·¸°Ô ÀÏÀÏÀÌ ´Ù ó¸®ÇؾßÇÑ´Ù. // ´ã¿¡ Çѹø ½Ï Á¤¸®¸¦ ÇØ¾ßÇÏ´øÁö..ÇØ¾ß°Ú´Ù. static int s_nWidthInFunc = -1; static int s_nHeightInFunc = -1; if( s_nWidthInFunc == nWidth && s_nHeightInFunc == nHeight && s_nUISize == nStep ) return; s_nWidthInFunc = nWidth; s_nHeightInFunc = nHeight; // ±âÁذª Àç°è»ê. float fHR = float(nHeight) / DEFAULT_UI_SCREEN_HEIGHT; float fWR = float(nWidth) / DEFAULT_UI_SCREEN_WIDTH; s_fDialogScaleValueVert = ( fHR - 1.0f ) * UI_DIALOG_SCALE_VALUE; if( s_fDialogScaleValueVert < 0.0f ) s_fDialogScaleValueVert = 0.0f; s_fDialogScaleValueHori = ( fWR - 1.0f ) * UI_DIALOG_SCALE_VALUE; if( s_fDialogScaleValueHori < 0.0f ) s_fDialogScaleValueHori = 0.0f; if( fHR < fWR ) { s_fDialogScale = fHR; s_fDialogScale -= s_fDialogScaleValueVert; } else { s_fDialogScale = fWR; s_fDialogScale -= s_fDialogScaleValueHori; } CalcDialogScaleValue( nWidth, nHeight ); if( nStep == 1 ) { s_fDialogScale += s_fDialogScaleValueVert; if( s_fDialogScale > s_fMaxDialogScale ) { s_fDialogScale = s_fMaxDialogScale; } } else if( nStep == 2 ) { } else if( nStep == 3 ) { s_fDialogScale -= s_fDialogScaleValueVert; if( s_fDialogScale < s_fMinDialogScale ) { s_fDialogScale = s_fMinDialogScale; } } else if( nStep == 4 ) { s_fDialogScale -= s_fDialogScaleValueVert; s_fDialogScale -= s_fDialogScaleValueVert; if( s_fDialogScale < s_fMinDialogScale ) { s_fDialogScale = s_fMinDialogScale; } } // ÆùÆ® Å©±â·ÎºÎÅÍ ¿µ¿ªÀ» ±¸ÇÏ´Â ÄÁÆ®·ÑµéÀÌ Àֱ⶧¹®¿¡ ÆùÆ® ¸Å´ÏÀú ¸ÕÀú ¸®¼ÂÇϰí ProcessChangeResolution¸¦ È£ÃâÇØ¾ßÇÑ´Ù. if( CEtFontMng::IsActive() ) { CEtFontMng::GetInstance().OnLostDevice(); CEtFontMng::GetInstance().OnResetDevice(); } ProcessChangeResolution(); s_nUISize = nStep; } void CEtUIDialog::ReleaseMouseEnterControl() { if( s_pMouseEnterControl ) { s_pMouseEnterControl->MouseEnter( false ); s_pMouseEnterControl = NULL; ShowTooltipDlg( NULL, false ); } } void CEtUIDialog::SetMouseEnterControl( CEtUIControl *pControl ) { ASSERT( pControl&&"CEtUIDialog::SetMouseEnterControl" ); ReleaseMouseEnterControl(); // Note : »õ·Î¿î ÄÁÆ®·ÑÀ» µî·ÏÇϰí ÅøÆÁÀ» Ç¥½ÃÇÑ´Ù. // s_pMouseEnterControl = pControl; s_pMouseEnterControl->MouseEnter( true ); if( drag::IsValid() ) { // Note : µå·¡±× µÇ´Â ¾ÆÀÌÅÛÀÌ ÀÖÀ¸¸é ÅøÆÁÀº Ç¥½ÃÇÏÁö ¾Ê´Â´Ù. // return; } SUIControlProperty sProperty; s_pMouseEnterControl->GetProperty( sProperty ); if( pControl->IsShow() ) { if( sProperty.nTooltipStringIndex > 0 ) { ShowTooltipDlg( pControl, true, sProperty.nTooltipStringIndex ); } else { std::wstring strTooltipText = s_pMouseEnterControl->GetTooltipText(); if( !strTooltipText.empty() ) { ShowTooltipDlg( pControl, true, strTooltipText ); } } } } #ifdef PRE_FIX_COMBOBOX_ELLIPSIS bool CEtUIDialog::MakeStringWithEllipsis(SUIElement* pElement, float lineWidth, std::wstring& text, const std::wstring& symbol) #else void CEtUIDialog::MakeStringWithEllipsis(SUIElement* pElement, float lineWidth, std::wstring& text, const std::wstring& symbol) #endif { #ifdef PRE_FIX_COMBOBOX_ELLIPSIS if( !pElement ) return false; #else if( !pElement ) return; #endif int fontIndex = pElement->nFontIndex; int fontHeight = pElement->nFontHeight; DWORD fontFormat = pElement->dwFontFormat; SUICoord sSymbolCoord; //CalcTextRect( symbol.c_str(), pElement, sSymbolCoord ); CalcTextRect(symbol.c_str(), fontIndex, fontHeight, sSymbolCoord, fontFormat, true); SUICoord sTextCoord; //CalcTextRect( text.c_str(), pElement, sTextCoord ); CalcTextRect(text.c_str(), fontIndex, fontHeight, sTextCoord, fontFormat, false); const float& width = lineWidth; const float& height = GetFontHeight( fontIndex, fontHeight ); if( sTextCoord.fWidth > width ) { float fRemainWidth = width - sSymbolCoord.fWidth; int nStrLen = (int)text.length(); float fTextCoordHeight = sTextCoord.fHeight; int i(0), nStartPos(0); for( ; (nStartPos+i) width ) { nStartPos += i-1; i = 0; fTextCoordHeight += sSubTextCoord.fHeight; } } else { // ¸¶Áö¸· ¶óÀÎÀ» °Ë»çÇÑ´Ù. if( sSubTextCoord.fWidth > fRemainWidth ) { i--; text = text.substr(0,nStartPos+i); text += symbol; #ifdef PRE_FIX_COMBOBOX_ELLIPSIS return true; #else return; #endif } } } } #ifdef PRE_FIX_COMBOBOX_ELLIPSIS return false; #endif } #pragma warning(default:4482)