#include "stdafx.h" #include "SUITopConsoleWnd.h" //#include "KUIControl.h" #include "KUIControlEdit.h" #include "KUIControlStatic.h" #include "KUIControlScroll.h" #include "KUIControlClockBox.h" #include "KUIControlQJTV.h" #include "KDeviceManager.h" #include "KRenderDevice.h" #include "KUITextureManager.h" //#include "Util.h" #include "KCommandBuilder.h" #include #include "KResourceDX.h" #include #include #include "SGameMessage.h" //#include "SGameMessageUI.h" #include "SStringDB.h" #include "SUIDefine.h" #include "KTGA_IO.h" #include "SGameManager.h" #include namespace { const int c_nDelta = 15; const int c_nMaxConsoleHistory = 27; const int c_nMinConsoleHistory = 12; const int c_nMaxEditHistory = 10; const char * c_szOUT_FRAME = "static_common_outframe01"; const char * c_szV_SCROLL = "static_scrollbar_backgroundable"; const char * c_szHISTORY_FRAME = "static_fulldown_outframe"; } extern DWORD g_dwFPS; extern int g_DP_Count[3]; extern int g_UsedMeshEXPoolCount[3]; extern int g_Poly_Count; extern int g_TexMem; extern int g_TexRef; extern int g_TerrainSegments; extern bool g_bActiveRender; extern TCHAR BuildDate[16]; extern TCHAR BuildTime[16]; extern void MsgSplit( const char* szMsg, std::vector& vecText, const wchar_t* lpDelimiter, bool bProcSpecialCharacter=false ); #define RP2AP(fRelativePoint, fWidth) (int)(((float)fRelativePoint * (float)fWidth) + 0.5f) ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // bool SUITopSystemInfoWnd::CreateControls( class KUIWndManager* pWndManager ) { m_dwCheckTime = 0; pWndManager->CreateControl( KUIWND_CREATE_ARG( "static", "info", "", GetRect(), 0, 0, this, "", "", pWndManager, 0, "" ) ); Refresh(); return true; } void SUITopSystemInfoWnd::Refresh() { static std::string strActive; KUIWnd* pInfo = GetChild( "info" ); if( pInfo ) { if( g_bActiveRender ) strActive = "ActiveRender On "; else strActive = "ActiveRender Off"; pInfo->SetCaption( CStringUtil::StringFormat( "%s %07d FPS
%d %d %d
%s %s", strActive.c_str(), g_dwFPS, g_UsedMeshEXPoolCount[0], g_UsedMeshEXPoolCount[1], g_UsedMeshEXPoolCount[2], BuildDate, BuildTime ).c_str() ); } } void SUITopSystemInfoWnd::Process(DWORD dwTime) { if( m_dwCheckTime == 0 ) m_dwCheckTime = dwTime; if( dwTime - m_dwCheckTime > 1000 ) { m_dwCheckTime = dwTime; Refresh(); } } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // bool SUITopConsoleWnd::CreateControls( KUIWndManager* pWndManager ) { // 에디트 박스 pWndManager->CreateControl( KUIWND_CREATE_ARG( "edit", "chatEdit", "", KRect( KPoint(0, 248), KSize(1000, 20) ), 0, 0, this, c_szOUT_FRAME, c_szDEF_SPR_NAME, pWndManager, 0, "", KANCHOR_BOTTOM | KANCHOR_LEFT ) ); // 스크롤 KUIWnd* pScrollWnd = pWndManager->CreateControl( KUIWND_CREATE_ARG( "v_scroll", "console_scroll", "", KRect( KPoint(GetRect().right-15, GetRect().top+40), KSize(15, GetRect().GetHeight()-70) ), 0, 0, this, c_szV_SCROLL, c_szDEF_SPR_NAME, pWndManager, 0, "", KANCHOR_TOP | KANCHOR_RIGHT ) ); // static pWndManager->CreateControl( KUIWND_CREATE_ARG( "static", "history", "", KRect( KPoint(GetRect().left+5, GetRect().top+40), KSize(GetRect().right - pScrollWnd->GetRect().GetWidth() -5, GetRect().GetHeight()-70) ), 0, 0, this, c_szHISTORY_FRAME, c_szDEF_SPR_NAME, pWndManager, 0, "", KANCHOR_TOP | KANCHOR_LEFT ) ); // 리사이즈 할때 단위 설정, ( 세로, 가로, 위드, 헤잇 ) SetResizeUnit( 0, c_nDelta, KSize(GetRect().GetWidth(), GetRect().GetHeight()), KSize(GetRect().GetWidth(), GetRect().GetHeight()+(c_nDelta*15)) ); return true; } void SUITopConsoleWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch(nMessage) { case KUI_MESSAGE::KBUTTON_CLICK: { if( 0 == ::_stricmp( "idok", lpszControlID ) ) { KUIControlEdit* pEditConsole = dynamicCast(GetChild( "chatEdit" )); if( NULL != pEditConsole ) { std::string strConsole = pEditConsole->GetText(); // 에디트 박스 히스토리 남긴다. if( m_vecEditHistoryList.size() >= c_nMaxEditHistory ) m_vecEditHistoryList.pop_back(); m_vecEditHistoryList.insert( m_vecEditHistoryList.begin(), strConsole ); m_vecEditHistoryList.unique(); m_nEditCurPos = -1; if( strConsole.empty() ) break; // 여백 단위로 자른다. std::vector vecStringList; MsgSplit( strConsole.c_str(), vecStringList, L" " ); // 입력 키워드 생성 std::string strInputText; XStringUtil::Format( strInputText, "> %s", vecStringList[0].c_str() ); // 파싱에러 처리 if( vecStringList.size() < 1 ) { strInputText += "
parsing error"; AddChatText( strInputText.c_str() ); } else { // 출력용 strInputText += " "; for( int i = 1; i < static_cast(vecStringList.size()); i++ ) { strInputText += vecStringList[i]; strInputText += "; "; } AddChatText( strInputText.c_str() ); // 명령어 빌드 GetCommandBuilder().BuildCommand( vecStringList ); } pEditConsole->SetText(""); vecStringList.clear(); } } } break; case KUI_MESSAGE::KSCROLL_SELECT: // 스크롤 선택 { int nPos = int(lparam); nPos = max( nPos, 0 ); RefreshText(nPos); } break; case KUI_MESSAGE::KGENWND_RESIZE: { int nMoveHeight = GetRect().GetHeight() - static_cast(wparam); int nMoveCount = nMoveHeight/c_nDelta; m_nCurLine += nMoveCount; m_nCurLine = max( m_nCurLine, c_nMinConsoleHistory ); m_nCurLine = min( m_nCurLine, c_nMaxConsoleHistory ); KUIWnd* pStaticWnd = GetChild( "history" ); if( pStaticWnd ) { KRect rc = pStaticWnd->GetRect(); rc.bottom += nMoveCount*c_nDelta; pStaticWnd->Resize( rc ); } KUIWnd* pScrollWnd = GetChild( "console_scroll" ); if( pScrollWnd ) { KRect rc = pScrollWnd->GetRect(); rc.top = pStaticWnd->GetRect().top; rc.bottom = pStaticWnd->GetRect().bottom; pScrollWnd->Resize( rc ); } RefreshText(); RefreshScrollbar(); } break; case KUI_MESSAGE::KEDIT_VK_UP: { // 에디트 히스토리 if( m_nEditCurPos >= c_nMaxEditHistory ) break; ++m_nEditCurPos; m_nEditCurPos = min( m_nEditCurPos, c_nMaxEditHistory-1 ); RefreshEditBox(); } break; case KUI_MESSAGE::KEDIT_VK_DOWN: { // 에디트 히스토리 --m_nEditCurPos; m_nEditCurPos = max( m_nEditCurPos, -1 ); RefreshEditBox(); } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } void SUITopConsoleWnd::ProcMsgAtStatic( SGameMessage* pMsg ) { /*switch(pMsg->nType) { case IMSG_UI_CONSOLE_RELUST: { SIMSG_UI_CONSOLE_RELUST* pResultMsg = (SIMSG_UI_CONSOLE_RELUST*)pMsg; if( !pResultMsg->m_strResult.empty() ) AddChatText( pResultMsg->m_strResult.c_str() ); } break; }*/ } void SUITopConsoleWnd::RefreshEditBox() { if( m_vecEditHistoryList.empty() ) { m_nEditCurPos = -1; return; } KUIWnd* pWnd = GetChild( "chatEdit" ); if( pWnd == NULL ) return; if( m_nEditCurPos == -1 ) { ((KUIControlEdit*)pWnd)->SetText( "" ); return; } int nIndex = 0; std::list::iterator it = m_vecEditHistoryList.begin(); while( it != m_vecEditHistoryList.end() ) { if( m_nEditCurPos == nIndex ) { ((KUIControlEdit*)pWnd)->SetText( (*it).c_str() ); return; } nIndex++; it++; } } void SUITopConsoleWnd::AddChatText( const char* szText ) { KUIWnd* pStaticWnd = GetChild( "history" ); if( pStaticWnd == NULL ) return; std::vector vecLineList; dynamicCast(pStaticWnd)->SplitLine( vecLineList, szText, "바탕" ); if( vecLineList.empty() ) return; if( vecLineList.size() == 1 ) m_vecHistoryList.push_back( vecLineList[0].c_str() ); else { for( std::vector::iterator it = vecLineList.begin(); it != vecLineList.end(); it++ ) m_vecHistoryList.push_back( (*it) ); } vecLineList.clear(); RefreshText(); RefreshScrollbar(); } void SUITopConsoleWnd::RefreshText( int nRange ) { if( m_vecHistoryList.size() <= 0 ) return; std::string strCaption; int nHistoryCount = static_cast( m_vecHistoryList.size() ); // 커런트 스크롤 위치 계산 = 스크롤 위치로부터 m_nCurLine 개수 만큼 보여준다. int nScrollPos = max( nHistoryCount - m_nCurLine, 0 ); if( nRange != -1 ) nScrollPos = nRange; // 스크롤 위치 = 리스트 시작 인덱스 int nIndex = nScrollPos; //
태그 넣어주기 위해 bool bNextLine = false; // 순서는 거꾸로 넣어준다. m_nCurLine 개수만큼 for( int i = nScrollPos+m_nCurLine-1; i >= nScrollPos; i-- ) { if( i < nHistoryCount ) { if( bNextLine ) strCaption += "
"; strCaption += m_vecHistoryList[nIndex]; bNextLine = true; nIndex++; } else strCaption += ">
"; } SetChildCaption( "history", strCaption.c_str() ); } void SUITopConsoleWnd::RefreshScrollbar() { int nScrollRange = max( static_cast(m_vecHistoryList.size()) - m_nCurLine, 0); KUIControlVScroll* pScrollBar = dynamicCast(GetChild( "console_scroll" )); if( NULL != pScrollBar ) { pScrollBar->SetMaxRange( DWORD(nScrollRange+1) ); pScrollBar->SetPosition( nScrollRange ); } } //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //// //bool SUILoaingTextOutWnd::CreateControls( class KUIWndManager* pWndManager ) //{ // // static // m_dwCheckTime = 0; // pWndManager->CreateControl( KUIWND_CREATE_ARG( "static", "msg_out", "", GetRect(), 0, 0, this, "", "", pWndManager, 0, "" ) ); // return true; //} // //void SUILoaingTextOutWnd::Refresh() //{ // static std::string strActive; // KUIWnd* pInfo = GetChild( "msg_out" ); // if( pInfo ) // { // int nAddIndex = rand()%2; // pInfo->SetCaption( CStringUtil::StringFormat( "

%s", GetStringDB().GetString( 823+nAddIndex ) ).c_str() ); // } //} namespace { const int c_nTopRatio = 9; const int c_nBottomRatio = 7; const int c_nAlpha = 0; const int c_nMsgRatio = 4; const float c_fAlpha = 600.f; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //화면 집중 효과 윈도우 bool SUIEffectWnd::CreateControls( class KUIWndManager* pWndManager ) { KRect topRect, bottomRect; topRect.left = 0; topRect.right = KUIWndManager::GetResolution().cx; topRect.top = 0; topRect.bottom = KUIWndManager::GetResolution().cy/c_nTopRatio; bottomRect.left = 0; bottomRect.right = KUIWndManager::GetResolution().cx; bottomRect.top = KUIWndManager::GetResolution().cy - KUIWndManager::GetResolution().cy/c_nBottomRatio; bottomRect.bottom = KUIWndManager::GetResolution().cy; // color box top KUIWND_CREATE_ARG arg; arg.lpszAniName = ""; arg.lpszSprName = m_sSprName.c_str(); arg.lpszClassName = "colorbox"; arg.lpszID = "color_top"; arg.dwFlag = KFLAG_NO_GET_MESSAGE; arg.dwStyle = 0; arg.rcRect = topRect; arg.pParent = this; arg.dwFlag = KFLAG_GET_PASS_MESSAGE; KUIControlColorBox* pWndTop = (KUIControlColorBox*)pWndManager->CreateControl(arg); pWndTop->SetIndexColor( 0, KColor( 0,0,0,255 ) ); pWndTop->SetIndexColor( 1, KColor( 0,0,0,255 ) ); pWndTop->SetIndexColor( 2, KColor( 0,0,0,c_nAlpha ) ); pWndTop->SetIndexColor( 3, KColor( 0,0,0,c_nAlpha ) ); arg.lpszID = "color_bottom"; arg.rcRect = bottomRect; arg.pParent = this; KUIControlColorBox* pWndBottom = (KUIControlColorBox*)pWndManager->CreateControl(arg); pWndBottom->SetIndexColor( 0, KColor( 0,0,0,c_nAlpha ) ); pWndBottom->SetIndexColor( 1, KColor( 0,0,0,c_nAlpha ) ); pWndBottom->SetIndexColor( 2, KColor( 0,0,0,255 ) ); pWndBottom->SetIndexColor( 3, KColor( 0,0,0,255 ) ); _setState( NORMAL ); SetShow( false ); return true; } void SUIEffectWnd::ProcMsgAtStatic( SGameMessage* pMsg ) {//화면 크기에 맞게 리사이즈 if( pMsg->nType == IMSG_UI_CHANGE_RESOLUTION ) { pMsg->bUse = true; SIMSG_UI_CHANGE_RESOLUTION* pChangeResolution = dynamicCast(pMsg); int nW = pChangeResolution->m_nWidth; int nH = pChangeResolution->m_nHeight; Resize( KRect(0,0,nW,nH) ); KUIWnd* pColorBoxTop = GetChild( "color_top" ); if( pColorBoxTop ) { KRect topRect; topRect.left = 0; topRect.right = nW; topRect.top = 0; topRect.bottom = nH/c_nTopRatio; pColorBoxTop->Resize( topRect ); pColorBoxTop->MovePos( 0, 0 ); } KUIWnd* pColorBoxBottom = GetChild( "color_bottom" ); if( pColorBoxBottom ) { KRect bottomRect; bottomRect.left = 0; bottomRect.right = nW; bottomRect.top = nH - nH/c_nBottomRatio; bottomRect.bottom = nH; pColorBoxBottom->Resize( bottomRect ); pColorBoxBottom->MovePos( 0, bottomRect.top ); } } else if( pMsg->nType == IMSG_UI_SEND_DATA ) { SIMSG_UI_SEND_DATA* pSendData = dynamicCast(pMsg); if( pSendData->m_nTarget == SIMSG_TOGGLE_UIWINDOW::UIWINDOW_EFFECT_FOCUS ) { if( stricmp( pSendData->m_strString.c_str(), "alpha_open" )==0 ) { _setState( ALPHA_OPEN_INIT ); SetShow( true ); } else if( stricmp( pSendData->m_strString.c_str(), "alpha_close" )==0 ) { _setState( ALPHA_CLOSE_INIT ); } } } } void SUIEffectWnd::Process(DWORD dwTime) { m_dwTime = dwTime; switch( _getState() ) { case ALPHA_OPEN_INIT : { m_dwStartTime = m_dwTime; ChangeAlpha( 0.f ); _setState( ALPHA_OPEN_ING ); } break; case ALPHA_OPEN_ING : if( m_dwTime - m_dwStartTime < c_fAlpha ) { float fValue = (m_dwTime - m_dwStartTime)/c_fAlpha; ChangeAlpha( fValue ); } else { ChangeAlpha( 1.f ); _setState( NORMAL ); SetShow( true ); } break; case NORMAL : break; case ALPHA_CLOSE_INIT : { m_dwStartTime = m_dwTime; ChangeAlpha( 1.f ); _setState( ALPHA_CLOSE_ING ); } break; case ALPHA_CLOSE_ING : { if( m_dwTime - m_dwStartTime < c_fAlpha ) { float fValue = 1.f-(m_dwTime - m_dwStartTime)/c_fAlpha; ChangeAlpha( fValue ); } else { ChangeAlpha( 0.f ); _setState( NORMAL ); SetShow( false ); } break; } break; } } extern void SetCopy( char * pSrc, const int nSrcStride, char * pDst, const int nDstStride, const int nWidth, const int nHeight ); ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //SUIFadeInOutEffectWnd bool SUIFadeInOutEffectWnd::CreateControls( class KUIWndManager* pWndManager ) { KRect rc; rc.left = 0; rc.top = 0; rc.right = KUIWndManager::GetResolution().cx; rc.bottom = KUIWndManager::GetResolution().cy; // color box top KUIWND_CREATE_ARG arg; arg.lpszAniName = ""; arg.lpszSprName = m_sSprName.c_str(); arg.lpszClassName = "colorbox"; arg.lpszID = "color_box"; arg.dwFlag = KFLAG_NO_GET_MESSAGE; arg.dwStyle = 0; arg.rcRect = rc; arg.pParent = this; arg.dwFlag = KFLAG_GET_PASS_MESSAGE; m_pControl = (KUIControlColorBox*)pWndManager->CreateControl(arg); m_fAlpha = 1.0f; m_dwOldTime = 0; m_Color = KColor( 0, 0, 0, m_fAlpha*255 ); if( m_pControl ) { m_pControl->SetIndexColor( 0, m_Color ); m_pControl->SetIndexColor( 1, m_Color ); m_pControl->SetIndexColor( 2, m_Color ); m_pControl->SetIndexColor( 3, m_Color ); } else { return false; } m_nFadeState = FADE_NONE; SetShow( false ); return true; } void SUIFadeInOutEffectWnd::ProcMsgAtStatic( SGameMessage* pMsg ) { if( pMsg->nType == IMSG_UI_FADE_IN_EFFECT ) { pMsg->bUse = true; m_nFadeState = FADE_IN; m_dwOldTime = 0; m_fAlpha = 1.0f; SetShow( true ); } else if( pMsg->nType == IMSG_UI_FADE_OUT_EFFECT ) { pMsg->bUse = true; m_nFadeState = FADE_OUT; m_dwOldTime = 0; m_fAlpha = 0.0f; SetShow( true ); } else if( pMsg->nType == IMSG_UI_CHANGE_RESOLUTION ) { SIMSG_UI_CHANGE_RESOLUTION* pChangeResolution = dynamicCast(pMsg); if( m_pControl ) { m_pControl->Resize( KRect( 0,0, pChangeResolution->m_nWidth, pChangeResolution->m_nHeight ) ); m_pControl->MovePos( 0, 0 ); } pMsg->bUse = true; } } void SUIFadeInOutEffectWnd::Process(DWORD dwTime) { if( !IsShow() ) return; KUIWnd::Process(dwTime); if( m_dwOldTime == 0 ) m_dwOldTime = dwTime; if( m_pControl ) { if( m_nFadeState == FADE_IN ) { m_fAlpha = 1.0f-(float)(dwTime - m_dwOldTime) / 2000; if( m_fAlpha <= 0.0f ) { m_fAlpha = 0.0f; m_dwOldTime = 0; m_nFadeState = FADE_NONE; } } else if( m_nFadeState == FADE_OUT ) { m_fAlpha = (float)(dwTime - m_dwOldTime) / 2000; if( m_fAlpha >= 1.0f ) { m_fAlpha = 1.0f; m_dwOldTime = 0; m_nFadeState = FADE_NONE; } } // m_pControl->ChangeAlpha( m_fAlpha * 255.0f ); m_Color.a = m_fAlpha * 255.0f; m_pControl->SetIndexColor( 0, m_Color ); m_pControl->SetIndexColor( 1, m_Color ); m_pControl->SetIndexColor( 2, m_Color ); m_pControl->SetIndexColor( 3, m_Color ); } else { SetShow( false ); } } bool SUIFadeInOutEffectWnd::IsEnd() { return m_nFadeState == FADE_NONE ? true : false; } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// // namespace { const int c_nDeltaY = 30; }; bool SUISkinColorWnd::InitControls( KPoint kPos ) { SetCustomMovingRect( KRect( 0,0,120,20 ) ); // 타이틀 바 선택 영역, 이동위해 클릭 Area return SUIWnd::InitControls(kPos); } bool SUISkinColorWnd::InitData( bool bReload /*= false*/ ) { if( !bReload ) { RECT rc; rc.top = c_nDeltaY; rc.left = 0; rc.right = 0; rc.bottom = c_nDeltaY; for( int i = 0; i < 2; i++ ) { CopyControl( CStringUtil::StringFormat("skin_color%1d0" , i).c_str(), CStringUtil::StringFormat("skin_color%1d0" , i+1).c_str(), rc ); CopyControl( CStringUtil::StringFormat("skin_color%1d1" , i).c_str(), CStringUtil::StringFormat("skin_color%1d1" , i+1).c_str(), rc ); CopyControl( CStringUtil::StringFormat("skin_color%1d2" , i).c_str(), CStringUtil::StringFormat("skin_color%1d2" , i+1).c_str(), rc ); CopyControl( CStringUtil::StringFormat("skin_color%1d3" , i).c_str(), CStringUtil::StringFormat("skin_color%1d3" , i+1).c_str(), rc ); } std::vector vColorList; GetSkinColorTable().GetAllColorTable( vColorList ); for( int i = 0; i < 3; i++ ) { KUIControlColorBox* pColorBox1 = dynamicCast(GetChild( CStringUtil::StringFormat("skin_color%1d0" , i).c_str() )); KUIControlColorBox* pColorBox2 = dynamicCast(GetChild( CStringUtil::StringFormat("skin_color%1d1" , i).c_str() )); KUIControlColorBox* pColorBox3 = dynamicCast(GetChild( CStringUtil::StringFormat("skin_color%1d2" , i).c_str() )); KUIControlColorBox* pColorBox4 = dynamicCast(GetChild( CStringUtil::StringFormat("skin_color%1d3" , i).c_str() )); if( pColorBox1 ) pColorBox1->SetWeightColor( KColor(vColorList[i*4+0]) ); if( pColorBox2 ) pColorBox2->SetWeightColor( KColor(vColorList[i*4+1]) ); if( pColorBox3 ) pColorBox3->SetWeightColor( KColor(vColorList[i*4+2]) ); if( pColorBox4 ) pColorBox4->SetWeightColor( KColor(vColorList[i*4+3]) ); } vColorList.clear(); } return SUIWnd::InitData(bReload); } bool SUIChinaWarringWnd::CreateControls( class KUIWndManager* pWndManager ) { // static KUIWND_CREATE_ARG arg; arg.lpszAniName = ""; arg.lpszSprName = m_sSprName.c_str(); arg.lpszClassName = "static"; arg.lpszID = "notice"; arg.dwStyle = 0; arg.rcRect = m_rcRegion; arg.pParent = this; arg.dwFlag = KFLAG_GET_PASS_MESSAGE; arg.lpszCaption = S(6520); KUIControlStatic* pStaticText = (KUIControlStatic*)( pWndManager->CreateControl(arg) ); arg.lpszClassName = "colorbox"; arg.lpszID = "notice_background"; arg.lpszCaption = ""; KUIControlColorBox* pBackground = (KUIControlColorBox*)( pWndManager->CreateControl( arg ) ); pBackground->SetWeightColor( KColor( 0xc0000000 ) ); SetChildAsTop( "notice" ); #ifdef _KUI_INVALIDATION AddPopupControl( pStaticText ); #endif return (pStaticText != NULL && pBackground != NULL) ? true : false; } bool SUIWebGameSutDownWnd::CreateControls( class KUIWndManager* pWndManager ) { // static KUIWND_CREATE_ARG arg; arg.lpszAniName = "button_common"; arg.lpszSprName = m_sSprName.c_str(); arg.lpszClassName = "button"; arg.lpszID = "sutdown"; // arg.dwFlag = KFLAG_NO_GET_MESSAGE; arg.dwStyle = 0; arg.rcRect = m_rcRegion; arg.pParent = this; // arg.dwFlag = KFLAG_GET_PASS_MESSAGE; arg.lpszCaption = S(6117); return pWndManager->CreateControl(arg) ? true : false; } void SUIWebGameSutDownWnd::PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam ) { switch( nMessage ) { case KUI_MESSAGE::KBUTTON_CLICK: { if( strcmp( lpszControlID, "sutdown" ) == 0 ) { m_pGameManager->ProcMsgAtStatic( &SIMSG_UIWND_NOTIFY_TO_LOBBY( "Web_SutDown" ) ); } } break; } SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam ); } #undef RP2AP