// CCalculate-Meldungshandler void CCalculate::OnBnClickedOk() { canClose = false; //wait until all threads have terminated and memory has been freed isRunning = true; // operation is runing and can be stopped by the user isError = false; GetDlgItem(IDOK)->EnableWindow(false); num_cpu = Ccpuinfo::get_num_cpu(); timelist_position = m_position; pi_digits = m_digits; m_text.Format(_T("Calculating %i digits of Pi with %i threads.\r\nPress \"Stop / Close\" to cancel calculation."), pi_digits, num_cpu); UpdateData(false); CProgressCtrl *progressBar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); //SetRange() has only support for short! SetRange32 supports 32bit integer! progressBar->SetRange32(0, pi_digits/TRUSTED); progressBar->SetPos(0); if(pi_digits <= 8000) myTimer = SetTimer(1, 1000, 0); else myTimer = SetTimer(1, 2000, 0); CCalculate myThread; AfxBeginThread(CCalculate::Control_Thread, reinterpret_cast<LPVOID>(&myThread), THREAD_PRIORITY_NORMAL, 0, 0, NULL); }
void CItemShopLogCommand::Parse( const MSGROOT* message, CListCtrl& listCtrl, CProgressCtrl& progressCtrl, CStatic& resultStatic, CButton& findButton, CButton& stopButton ) const { switch( message->Protocol ) { case MP_RM_ITEM_SHOP_LOG_ACK: { const MSG_RM_ITEM_SHOP_LOG* m = ( MSG_RM_ITEM_SHOP_LOG* )message; if( m->mRequestTick != mTickCount ) { break; } // 080401 LUJ, 이전 로그에 대한 인덱스 세트를 만들어 중복되지 않도록 체크한다 std::set< DWORD > indexSet; { for( int row = 0; row < listCtrl.GetItemCount(); ++row ) { indexSet.insert( _ttoi( listCtrl.GetItemText( row, 0 ) ) ); } } for( DWORD i = 0; i < m->mSize; ++i ) { const MSG_RM_ITEM_SHOP_LOG::Log& data = m->mLog[ i ]; const DWORD row = listCtrl.GetItemCount(); int step = 0; if( indexSet.end() != indexSet.find( data.mIndex ) ) { continue; } CString text; text.Format( _T( "%d" ), data.mIndex ); listCtrl.InsertItem( row, text, 0 ); listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mDate ) >( data.mDate ) ); listCtrl.SetItemText( row, ++step, mApplication.GetText( data.mType ) ); text.Format( _T( "%d" ), data.mUser.mIndex ); listCtrl.SetItemText( row, ++step, text ); listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mUser.mId ) >( data.mUser.mId ) ); listCtrl.SetItemText( row, ++step, mApplication.GetItemName( data.mItem.mIndex ) ); text.Format( _T( "%d" ), data.mItem.mDbIndex ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), data.mItem.mQuantity ); listCtrl.SetItemText( row, ++step, text ); } { int minRange; int maxRange; progressCtrl.GetRange( minRange, maxRange ); progressCtrl.SetPos( progressCtrl.GetPos() + m->mSize ); CString text; text.Format( _T( "%d/%d" ), progressCtrl.GetPos(), maxRange ); resultStatic.SetWindowText( text ); // 080523 LUJ, 버튼 활성화 체크가 정상적으로 되도록 수정함 if( progressCtrl.GetPos() == maxRange ) { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); } } break; } case MP_RM_ITEM_SHOP_LOG_SIZE_ACK: { const MSG_DWORD* m = ( MSG_DWORD* )message; const DWORD size = m->dwData; CString text; text.Format( _T( "0/%d" ), size ); resultStatic.SetWindowText( text ); progressCtrl.SetRange32( 0, size ); progressCtrl.SetPos( 0 ); findButton.EnableWindow( FALSE ); stopButton.EnableWindow( TRUE ); listCtrl.DeleteAllItems(); break; } case MP_RM_ITEM_SHOP_LOG_SIZE_NACK: { CString textThereIsNoResult; textThereIsNoResult.LoadString( IDS_STRING1 ); MessageBox( 0, textThereIsNoResult, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_ITEM_SHOP_LOG_STOP_ACK: { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); CString textSearchWasStopped; textSearchWasStopped.LoadString( IDS_STRING2 ); MessageBox( 0, textSearchWasStopped, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_ITEM_SHOP_LOG_NACK_BY_AUTH: { CString textYouHaveNoAuthority; textYouHaveNoAuthority.LoadString( IDS_STRING18 ); MessageBox( 0, textYouHaveNoAuthority, _T( "" ), MB_OK | MB_ICONERROR ); break; } default: { ASSERT( 0 ); break; } } }
void CFarmLogCommand::Parse( const MSGROOT* message, CListCtrl& listCtrl, CProgressCtrl& progressCtrl, CStatic& resultStatic, CButton& findButton, CButton& stopButton ) const { switch( message->Protocol ) { case MP_RM_FARM_LOG_ACK: { // 080401 LUJ, 이전 로그에 대한 인덱스 세트를 만들어 중복되지 않도록 체크한다 std::set< DWORD > indexSet; { for( int row = 0; row < listCtrl.GetItemCount(); ++row ) { indexSet.insert( _ttoi( listCtrl.GetItemText( row, 0 ) ) ); } } const MSG_RM_FARM_LOG* m = ( MSG_RM_FARM_LOG* )message; if( m->mRequestTick != mTickCount ) { break; } for( DWORD i = 0; i < m->mSize; ++i ) { const MSG_RM_FARM_LOG::Log& data = m->mLog[ i ]; const DWORD row = listCtrl.GetItemCount(); int step = 0; if( indexSet.end() != indexSet.find( data.mIndex ) ) { continue; } CString text; text.Format( _T( "%d" ), data.mIndex ); listCtrl.InsertItem( row, text, 0 ); listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mDate ) >( data.mDate ) ); listCtrl.SetItemText( row, ++step, mApplication.GetText( FARM_LOG_KIND( data.mKind ) ) ); text.Format( _T( "%d" ), data.mFarmIndex ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), data.mZone ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), data.mPlayerIndex ); listCtrl.SetItemText( row, ++step, text ); // 080423 LUJ, 농장 개선 로그일 때는 값에 표시 // // 주의: 로그가 잘못 표시되고 있음. 소스를 고치면 기존 로그가 손상되므로, 복구툴에서 정정함 // 이에 따라 로그 타입과 실제 표시되는 텍스트가 다를 수 있음 // // 정원 -> 정원, 울타리 -> 축사, 집 -> 울타리, 창고 -> 집, 축사 -> 창고 if( FARM_LOG_KIND_UPGRADE == data.mKind ) { switch( data.mValue1 ) { case FARM_UPGRADE_LOG_KIND_GARDEN: { CString textGarden; textGarden.LoadString( IDS_STRING368 ); listCtrl.SetItemText( row, ++step, textGarden ); break; } case FARM_UPGRADE_LOG_KIND_FENCE: { CString textCage; textCage.LoadString( IDS_STRING367 ); listCtrl.SetItemText( row, ++step, textCage ); break; } case FARM_UPGRADE_LOG_KIND_HOUSE: { CString textFence; textFence.LoadString( IDS_STRING366 ); listCtrl.SetItemText( row, ++step, textFence ); break; } case FARM_UPGRADE_LOG_KIND_WAREHOUSE: { CString textHouse; textHouse.LoadString( IDS_STRING369 ); listCtrl.SetItemText( row, ++step, textHouse ); break; } case FARM_UPGRADE_LOG_KIND_ANIMALCAGE: { CString textWarehouse; textWarehouse.LoadString( IDS_STRING282 ); listCtrl.SetItemText( row, ++step, textWarehouse ); break; } default: { listCtrl.SetItemText( row, ++step, _T( "?" ) ); break; } } } else { text.Format( _T( "%d" ), data.mValue1 ); listCtrl.SetItemText( row, ++step, text ); } text.Format( _T( "%d" ), data.mValue2 ); listCtrl.SetItemText( row, ++step, text ); } { int minRange; int maxRange; progressCtrl.GetRange( minRange, maxRange ); progressCtrl.SetPos( progressCtrl.GetPos() + m->mSize ); CString text; text.Format( _T( "%d/%d" ), progressCtrl.GetPos(), maxRange ); resultStatic.SetWindowText( text ); // 080523 LUJ, 버튼 활성화 체크가 정상적으로 되도록 수정함 if( progressCtrl.GetPos() == maxRange ) { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); } } break; } case MP_RM_FARM_LOG_SIZE_ACK: { const MSG_DWORD* m = ( MSG_DWORD* )message; const DWORD size = m->dwData; CString text; text.Format( _T( "0/%d" ), size ); resultStatic.SetWindowText( text ); progressCtrl.SetRange32( 0, size ); progressCtrl.SetPos( 0 ); findButton.EnableWindow( FALSE ); stopButton.EnableWindow( TRUE ); listCtrl.DeleteAllItems(); break; } case MP_RM_FARM_LOG_SIZE_NACK: { CString textThereIsNoResult; textThereIsNoResult.LoadString( IDS_STRING1 ); MessageBox( 0, textThereIsNoResult, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_FARM_LOG_STOP_ACK: { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); CString textSearchWasStopped; textSearchWasStopped.LoadString( IDS_STRING2 ); MessageBox( 0, textSearchWasStopped, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_FARM_LOG_NACK_BY_AUTH: { CString textYouHaveNoAuthority; textYouHaveNoAuthority.LoadString( IDS_STRING18 ); MessageBox( 0, textYouHaveNoAuthority, _T( "" ), MB_OK | MB_ICONERROR ); break; } default: { ASSERT( 0 ); break; } } }
BOOL CBaseDlg::OnInitDialog() { //CDialog::OnInitDialog(); if (m_hIcon) { SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 } m_bInit = TRUE; for (int i = 0; i < m_vecCtrl.size(); i++) { switch (m_vecCtrl[i].type) { case BASE_BUTTON: case BASE_CHECK_BUTTON: { CButton* pCtrl = (CButton*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_COMMOM_BUTTON: { CCommonButton* pCtrl = (CCommonButton*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_STATIC: { CStatic* pCtrl = (CStatic*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_MY_CHECK_BUTTON: { CMyCheckButton* pCtrl = (CMyCheckButton*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_INDICATOR: { CIndicator* pCtrl = (CIndicator*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_GROUPBOX: { CGroupBox* pCtrl = (CGroupBox*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_EDIT_CSTRING: case BASE_EDIT_DOUBLE: { CEdit* pCtrl = (CEdit*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); break; } case BASE_COLOR_TEXT: { CColorText* pCtrl = (CColorText*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); break; } case BASE_DRAWVIEW: { CDrawView* pCtrl = (CDrawView*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); break; } case BASE_LIST: { CListCtrl* pCtrl = (CListCtrl*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); break; } case BASE_TABVIEW: { CTabViewCtrl* pCtrl = (CTabViewCtrl*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); break; } case BASE_GRADIENT_BACKGROUND: { CGradientBackground* pCtrl = (CGradientBackground*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); break; } case BASE_COMBOBOX: { CComboBox* pCtrl = (CComboBox*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); pCtrl->SetFont(&mFont); CString caption = m_vecCtrl[i].sCaption; for (int j = 0; j < m_vecCtrl[i].nDataCount; j++) { int endpos = caption.Find(L"\n"); CString item = caption.Mid(0, endpos); pCtrl->AddString(item); caption = caption.Right(caption.GetLength()-endpos-1); } pCtrl->SetCurSel(0); break; } case BASE_PROGRESS: { CProgressCtrl* pCtrl = (CProgressCtrl*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); if (m_vecCtrl[i].pInOutData != NULL) { pCtrl->SetRange32((int)m_vecCtrl[i].dMinVal,(int)m_vecCtrl[i].dMaxVal); } break; } case BASE_SLIDER: { CSliderCtrl* pCtrl = (CSliderCtrl*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); if (m_vecCtrl[i].pInOutData != NULL) { pCtrl->SetRangeMax((int)m_vecCtrl[i].dMaxVal); pCtrl->SetRangeMin((int)m_vecCtrl[i].dMinVal); } break; } case BASE_SLIDER_GROUP: { CSliderGroup* pCtrl = (CSliderGroup*)m_vecCtrl[i].pCtrl; pCtrl->Create(m_vecCtrl[i].sCaption, m_vecCtrl[i].dwStyle, m_vecCtrl[i].rect, m_vecCtrl[i].pParent, m_vecCtrl[i].nID); if (m_vecCtrl[i].pInOutData!=NULL) { pCtrl->GetSlider()->SetRangeMax((int)m_vecCtrl[i].dMaxVal); pCtrl->GetSlider()->SetRangeMin((int)m_vecCtrl[i].dMinVal); } break; } default: break; } } UpdateData(FALSE); return TRUE; }
void CExperienceLogCommand::Parse( const MSGROOT* message, CListCtrl& listCtrl, CProgressCtrl& progressCtrl, CStatic& resultStatic, CButton& findButton, CButton& stopButton ) const { switch( message->Protocol ) { case MP_RM_EXP_LOG_GET_SIZE_ACK: { const MSG_DWORD* m = ( MSG_DWORD* )message; const DWORD size = m->dwData; CString text; text.Format( _T( "0/%d" ), size ); resultStatic.SetWindowText( text ); progressCtrl.SetRange32( 0, size ); progressCtrl.SetPos( 0 ); findButton.EnableWindow( FALSE ); stopButton.EnableWindow( TRUE ); listCtrl.DeleteAllItems(); break; } case MP_RM_EXP_LOG_GET_SIZE_NACK: { CString textThereIsNoResult; textThereIsNoResult.LoadString( IDS_STRING1 ); MessageBox( 0, textThereIsNoResult, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_EXP_LOG_GET_ACK: { const MSG_RM_EXP_LOG* m = ( MSG_RM_EXP_LOG* )message; // 080401 LUJ, 이전 로그에 대한 인덱스 세트를 만들어 중복되지 않도록 체크한다 std::set< DWORD > indexSet; { for( int row = 0; row < listCtrl.GetItemCount(); ++row ) { indexSet.insert( _ttoi( listCtrl.GetItemText( row, 0 ) ) ); } } for( DWORD i = 0; i < m->mSize; ++i ) { const MSG_RM_EXP_LOG::Log& data = m->mLog[ i ]; const DWORD row = listCtrl.GetItemCount(); int step = 0; if( indexSet.end() != indexSet.find( data.mLogIndex ) ) { continue; } CString text; text.Format( _T( "%d" ), data.mLogIndex ); listCtrl.InsertItem( row, text, 0 ); listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mDate ) >( data.mDate ) ); // 080416 LUJ, 로그 종류를 문자로 표시하도록 함 listCtrl.SetItemText( row, ++step, mApplication.GetText( data.mType ) ); text.Format( _T( "%d" ), data.mGrade ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), data.mVariation ); listCtrl.SetItemText( row, ++step, text ); // 080716 LUJ, 킬러 종류를 번호로 표시한다 text.Format( _T( "%d" ), data.mKillerKind ); listCtrl.SetItemText( row, ++step, text ); listCtrl.SetItemText( row, ++step, mApplication.GetMonsterName( data.mKillerKind ) ); text.Format( _T( "%d" ), data.mKillerIndex ); listCtrl.SetItemText( row, ++step, text ); // 080716 LUJ, 경험치 형이 커져서 실수형으로 변경 text.Format( _T( "%0.0f" ), data.mExperience ); listCtrl.SetItemText( row, ++step, text ); // 080716 LUJ, 로그 상태에 따라 다른 형식으로 표시 switch( data.mType ) { case eExpLog_ProtectExp: { CString textProtect; textProtect.LoadString( IDS_STRING402 ); text.Format( _T( "%s: %d" ), textProtect, data.mCount ); listCtrl.SetItemText( row, ++step, text ); break; } } } { int minRange; int maxRange; progressCtrl.GetRange( minRange, maxRange ); progressCtrl.SetPos( progressCtrl.GetPos() + int( m->mSize ) ); CString text; text.Format( _T( "%d/%d" ), progressCtrl.GetPos(), maxRange ); resultStatic.SetWindowText( text ); // 080523 LUJ, 버튼 활성화 체크가 정상적으로 되도록 수정함 if( progressCtrl.GetPos() == maxRange ) { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); } } break; } case MP_RM_EXP_LOG_GET_STOP_ACK: { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); CString textSearchWasStopped; textSearchWasStopped.LoadString( IDS_STRING2 ); MessageBox( 0, textSearchWasStopped, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_EXP_LOG_GET_STOP_NACK: { ASSERT( 0 ); break; } default: { break; } } }
void CItemOptionLogCommand::Parse( const MSGROOT* message, CListCtrl& listCtrl, CProgressCtrl& progressCtrl, CStatic& resultStatic, CButton& findButton, CButton& stopButton ) const { switch( message->Protocol ) { case MP_RM_ITEM_OPTION_LOG_GET_ACK: { // 080401 LUJ, 이전 로그에 대한 인덱스 세트를 만들어 중복되지 않도록 체크한다 std::set< DWORD > indexSet; { for( int row = 0; row < listCtrl.GetItemCount(); ++row ) { indexSet.insert( _ttoi( listCtrl.GetItemText( row, 0 ) ) ); } } const MSG_RM_ITEM_OPTION_LOG* m = ( MSG_RM_ITEM_OPTION_LOG* )message; for( DWORD i = 0; i < m->mSize; ++i ) { const MSG_RM_ITEM_OPTION_LOG::Log& data = m->mLog[ i ]; const DWORD row = listCtrl.GetItemCount(); int step = -1; if( indexSet.end() != indexSet.find( data.mLogIndex ) ) { continue; } CString text; text.Format( _T( "%d" ), data.mLogIndex ); listCtrl.InsertItem( row, text, ++step ); listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mDate ) >( data.mDate ) ); listCtrl.SetItemText( row, ++step, mApplication.GetText( data.mType ) ); text.Format( _T( "%d" ), data.mItemDbIndex ); listCtrl.SetItemText( row, ++step, text ); { const ITEM_OPTION::Reinforce& reinforce = data.mOption.mReinforce; text.Format( _T( "%d" ), reinforce.mStrength ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mDexterity ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mVitality ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mIntelligence ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mWisdom ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mLife ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mMana ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mLifeRecovery ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mManaRecovery ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mPhysicAttack ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mPhysicDefence ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mMagicAttack ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), reinforce.mMagicDefence ); listCtrl.SetItemText( row, ++step, text ); // 080428 LUJ, 크리티컬 레이트가 이동 속도로 잘못 저장되고 있음 text.Format( _T( "%d" ), reinforce.mMoveSpeed ); listCtrl.SetItemText( row, ++step, text ); // 080428 LUJ, 크리티컬 데미지가 회피로 잘못 저장되고 있음 text.Format( _T( "%d" ), reinforce.mEvade ); listCtrl.SetItemText( row, ++step, text ); // 080428 LUJ, 이동 속도가 명중으로 잘못 저장되고 있음. text.Format( _T( "%d" ), reinforce.mAccuracy ); listCtrl.SetItemText( row, ++step, text ); // 080428 LUJ, 회피가 크리티컬 레이트로 잘못 저장되고 있음 text.Format( _T( "%d" ), reinforce.mCriticalRate ); listCtrl.SetItemText( row, ++step, text ); // 080428 LUJ, 명중이 크리티컬 데미지로 잘못 저장되고 있음 text.Format( _T( "%d" ), reinforce.mCriticalDamage ); listCtrl.SetItemText( row, ++step, text ); } { const ITEM_OPTION::Mix& mix = data.mOption.mMix; text.Format( _T( "%d" ), mix.mStrength ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), mix.mIntelligence ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), mix.mDexterity ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), mix.mWisdom ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), mix.mVitality ); listCtrl.SetItemText( row, ++step, text ); } { const ITEM_OPTION::Enchant& enchant = data.mOption.mEnchant; text.Format( _T( "%d" ), enchant.mIndex ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), enchant.mLevel ); listCtrl.SetItemText( row, ++step, text ); } listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mMemo ) >( data.mMemo ) ); } { int minRange; int maxRange; progressCtrl.GetRange( minRange, maxRange ); progressCtrl.SetPos( progressCtrl.GetPos() + int( m->mSize ) ); CString text; text.Format( _T( "%d/%d" ), progressCtrl.GetPos(), maxRange ); resultStatic.SetWindowText( text ); // 080523 LUJ, 버튼 활성화 체크가 정상적으로 되도록 수정함 if( progressCtrl.GetPos() == maxRange ) { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); } } break; } case MP_RM_ITEM_OPTION_LOG_SIZE_ACK: { const MSG_DWORD* m = ( MSG_DWORD* )message; const DWORD size = m->dwData; CString text; text.Format( _T( "0/%d" ), size ); resultStatic.SetWindowText( text ); progressCtrl.SetRange32( 0, size ); progressCtrl.SetPos( 0 ); findButton.EnableWindow( FALSE ); stopButton.EnableWindow( TRUE ); listCtrl.DeleteAllItems(); break; } case MP_RM_ITEM_OPTION_LOG_SIZE_NACK: { CString textThereIsNoResult; textThereIsNoResult.LoadString( IDS_STRING1 ); MessageBox( 0, textThereIsNoResult, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_ITEM_OPTION_LOG_STOP_ACK: { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); CString textSearchWasStopped; textSearchWasStopped.LoadString( IDS_STRING2 ); MessageBox( 0, textSearchWasStopped, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_ITEM_OPTION_LOG_NACK_BY_AUTH: { CString textYouHaveNoAuthority; textYouHaveNoAuthority.LoadString( IDS_STRING18 ); MessageBox( 0, textYouHaveNoAuthority, _T( "" ), MB_OK | MB_ICONERROR ); break; } default: { ASSERT( 0 ); break; } } }
void CSiegeLogCommand::Parse( const MSGROOT* message, CListCtrl& listCtrl, CProgressCtrl& progressCtrl, CStatic& resultStatic, CButton& findButton, CButton& stopButton ) const { switch( message->Protocol ) { case MP_RM_SIEGE_LOG_ACK: { // 080401 LUJ, 이전 로그에 대한 인덱스 세트를 만들어 중복되지 않도록 체크한다 std::set< DWORD > indexSet; { for( int row = 0; row < listCtrl.GetItemCount(); ++row ) { indexSet.insert( _ttoi( listCtrl.GetItemText( row, 0 ) ) ); } } // 081027 LUJ, 메모를 판단해서 적절한 글로 변경한다. 원래 state안의 숫자는 // [Map]Server\SiegeWareMgr.h에 선언된 enum 상수이나, 헤더를 참조 // 하면 컴파일에 문제가 있어 유연성이 없지만 분리했다 class { public: CString operator()( const CString& text ) const { if( text == _T( "state:0" ) ) { CString textWait; textWait.LoadString( IDS_STRING420 ); return textWait; } else if( text == _T( "state:1" ) ) { CString textStart; textStart.LoadString( IDS_STRING291 ); return textStart; } else if( text == _T( "state:2" ) ) { CString textReady; textReady.LoadString( AFX_IDS_IDLEMESSAGE ); CString textInstall; textInstall.LoadString( IDS_STRING418 ); CString textWaterseed; textWaterseed.LoadString( IDS_STRING417 ); } else if( text == _T( "state:3" ) ) { CString textEnd; textEnd.LoadString( IDS_STRING292 ); return textEnd; } return text; } } Translate; const MSG_RM_SIEGE_LOG* m = ( MSG_RM_SIEGE_LOG* )message; for( DWORD i = 0; i < m->mSize; ++i ) { const MSG_RM_SIEGE_LOG::Log& data = m->mLog[ i ]; const DWORD row = listCtrl.GetItemCount(); int step = 0; if( indexSet.end() != indexSet.find( data.mIndex ) ) { continue; } CString text; text.Format( _T( "%d" ), data.mIndex ); listCtrl.InsertItem( row, text, 0 ); listCtrl.SetItemText( row, ++step, CA2WEX< sizeof( data.mDate ) >( data.mDate ) ); listCtrl.SetItemText( row, ++step, mApplication.GetText( data.mType ) ); text.Format( _T( "%d" ), data.mGuildIndex ); listCtrl.SetItemText( row, ++step, text ); text.Format( _T( "%d" ), data.mPlayerIndex ); listCtrl.SetItemText( row, ++step, text ); listCtrl.SetItemText( row, ++step, Translate( CString( data.mMemo ) ) ); } { int minRange; int maxRange; progressCtrl.GetRange( minRange, maxRange ); progressCtrl.SetPos( progressCtrl.GetPos() + m->mSize ); CString text; text.Format( _T( "%d/%d" ), progressCtrl.GetPos(), maxRange ); resultStatic.SetWindowText( text ); // 080523 LUJ, 버튼 활성화 체크가 정상적으로 되도록 수정함 if( progressCtrl.GetPos() == maxRange ) { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); } } break; } case MP_RM_SIEGE_LOG_SIZE_ACK: { const MSG_DWORD* m = ( MSG_DWORD* )message; const DWORD size = m->dwData; CString text; text.Format( _T( "0/%d" ), size ); resultStatic.SetWindowText( text ); progressCtrl.SetRange32( 0, size ); progressCtrl.SetPos( 0 ); findButton.EnableWindow( FALSE ); stopButton.EnableWindow( TRUE ); listCtrl.DeleteAllItems(); break; } case MP_RM_SIEGE_LOG_SIZE_NACK: { CString textThereIsNoResult; textThereIsNoResult.LoadString( IDS_STRING1 ); MessageBox( 0, textThereIsNoResult, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_SIEGE_LOG_STOP_ACK: { findButton.EnableWindow( TRUE ); stopButton.EnableWindow( FALSE ); CString textSearchWasStopped; textSearchWasStopped.LoadString( IDS_STRING2 ); MessageBox( 0, textSearchWasStopped, _T( "" ), MB_ICONERROR | MB_OK ); break; } case MP_RM_SIEGE_LOG_NACK_BY_AUTH: { CString textYouHaveNoAuthority; textYouHaveNoAuthority.LoadString( IDS_STRING18 ); MessageBox( 0, textYouHaveNoAuthority, _T( "" ), MB_OK | MB_ICONERROR ); break; } default: { ASSERT( 0 ); break; } } }