DragonNest/Client/DnLauncher2/DnLauncherDlg.cpp

1337 lines
43 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// DnLauncherDlg.cpp : implementation file
//
#include "stdafx.h"
#include "DnLauncher.h"
#include "DnLauncherDlg.h"
#include "DnHtmlView.h"
#include "DnPatchThread.h"
#include "DnOptionDlg.h"
#include "DnExplorerDlg.h"
#ifdef _USE_BITTORRENT
#include "DnDownloadInformationDlg.h"
#endif // _USE_BITTORRENT
#if defined(_KOR)
#include "DnLauncherDlgKOR.h"
#elif defined(_CHN)
#include "DnLauncherDlgCHN.h"
#elif defined(_JPN)
#include "DnLauncherDlgJPN.h"
#elif defined(_TWN)
#include "DnLauncherDlgTWN.h"
#elif defined(_USA)
#include "DnLauncherDlgUSA.h"
#elif defined(_SG)
#include "DnLauncherDlgSG.h"
#elif defined(_THAI)
#include "DnLauncherDlgTHAI.h"
#elif defined(_EU)
#include "DnLauncherDlgEU.h"
#elif defined(_IDN)
#include "DnLauncherDlgIDN.h"
#elif defined(_RUS)
#include "DnLauncherDlgRUS.h"
#elif defined(_TEST)
#include "DnLauncherDlgTEST.h"
#else
#include "DnLauncherDlg.h"
#endif
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
extern CDnPatchDownloadThread* g_pPatchDownloadThread;
extern stDownloadInfoUpdateData g_DownloadInfoData;
extern CString g_szCmdLine;
extern int g_nInitErrorCode;
struct DownloadStateString
{
int nStateIndex;
int nStringID;
};
DownloadStateString g_DownloadStateString[] =
{
{ PATCH_NONE, -1 },
{ PATCH_CHECK_VERSION, (STR_CONFIRM_PATCH_VER) },
{ PATCH_CHECK_VERSION_FAILED, (STR_CONFIRM_PATCH_VER_FAILED) },
{ PATCH_DOWNLOAD_DATA, (STR_PATCH_DATA_DOWNLOADING) },
{ PATCH_DOWNLOAD_DATA_FAILED, (STR_PATCH_DATA_DOWNLOADING_FAILED) },
{ PATCH_MD5_CHECK, (STR_PATCH_MD5_CHECK) },
{ PATCH_MD5_CHECK_FAILED, (STR_PATCH_MD5_CHECK_FAILED) },
{ PATCH_APPLY_PAK_FILE, (STR_PATCH_APPLY_PAK_FILE ) },
{ PATCH_APPLY_PAK_FILE_FAILED, (STR_PATCH_APPLY_PAK_FILE_FAILED) },
{ PATCH_APPLY_PAK_FILE_END, -1 },
{ PATCH_COMPLETE, (STR_PATCH_COMPLETE) },
{ PATCH_LAUNCHER, -1 },
{ PATCH_FAILED, (STR_PATCH_FAILED) },
{ PATCH_TERMINATE, (STR_PATCH_TERMINATE) },
};
// CDnLauncherDlg dialog
CDnLauncherDlg::CDnLauncherDlg( CWnd* pParent )
: CDialog(CDnLauncherDlg::IDD, pParent)
, m_dwWidth( 0 )
, m_dwHeight( 0 )
, m_dwFlags ( 0 )
, m_emDownloadPatchState( PATCH_NONE )
, m_nMaxCtrlNum( 0 )
, m_pDnHtmlView( NULL )
, m_pDownloadProgress( NULL )
, m_pFileCountProgress( NULL )
, m_pDownloadProgressBitmap( NULL )
, m_pFileCountProgressBitmap( NULL )
, m_nDownloadProgressMin( 0 )
, m_nDownloadProgressMax( 0 )
, m_nCurrentFileCount( 0 )
, m_nTotalFileCount( 0 )
, m_fDownloadRate( 0.0f )
, m_bDownloading( FALSE )
, m_staticBaseColor( WHITE )
, m_dcBkGrnd( NULL )
, m_pRectCtrl( NULL )
{
m_hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME );
EnumDisplayMode( m_vecDisplayMode );
m_pntMouse.x = 0;
m_pntMouse.y = 0;
}
CDnLauncherDlg* CDnLauncherDlg::CreateLauncherDlg()
{
#if defined(_KOR)
return ( new CDnLauncherDlgKOR() );
#elif defined(_CHN)
return ( new CDnLauncherDlgCHN() );
#elif defined(_JPN)
return ( new CDnLauncherDlgJPN() );
#elif defined(_TWN)
return ( new CDnLauncherDlgTWN() );
#elif defined(_USA)
return ( new CDnLauncherDlgUSA() );
#elif defined(_SG)
return ( new CDnLauncherDlgSG() );
#elif defined(_THAI)
return ( new CDnLauncherDlgTHAI() );
#elif defined(_EU)
return ( new CDnLauncherDlgEU() );
#elif defined(_IDN)
return ( new CDnLauncherDlgIDN() );
#elif defined(_RUS)
return ( new CDnLauncherDlgRUS() );
#elif defined(_TEST)
return ( new CDnLauncherDlgTEST() );
#else
return (new CDnLauncherDlg());
#endif
return NULL;
}
void CDnLauncherDlg::DoDataExchange( CDataExchange* pDX )
{
CDialog::DoDataExchange( pDX );
// Button Ctrl
DDX_Control( pDX, IDC_CHECK_DIRECT_GAMESTART, m_BtnCheckDirectGameStart );
DDX_Control( pDX, IDC_BTN_CANCEL, m_BtnCancel );
DDX_Control( pDX, IDC_BTN_GAMESTART, m_BtnStartGame );
DDX_Control( pDX, IDC_BTN_OPTION, m_BtnGameOption );
DDX_Control( pDX, IDC_BTN_CLOSE, m_BtnClose );
DDX_Control( pDX, IDC_BTN_MINIMUM, m_BtnMinimum );
#ifdef _USE_PARTITION_SELECT
DDX_Control( pDX, IDC_BTN_SELECT_PARTITION, m_BtnSelectPartition );
DDX_Control( pDX, IDC_BTN_START_PATCH, m_BtnStartPatch );
#endif // _USE_PARTITION_SELECT
// ProgressBar Ctrl
DDX_Control( pDX, IDC_STATIC_PROGRESS_DOWNLOAD, m_StaticDownloadProgress );
DDX_Control( pDX, IDC_STATIC_PROGRESS_COUNT, m_StaticFileCountProgress );
// Static Text
DDX_Text( pDX, IDC_LAUNCHER_VERSION, m_strLauncherVersion );
DDX_Text( pDX, IDC_FILE_NAME, m_strFileName );
DDX_Text( pDX, IDC_FILE_SIZE, m_strFileSize );
DDX_Text( pDX, IDC_TIME_LEFT, m_strTimeLeft );
DDX_Text( pDX, IDC_FILE_COUNT, m_strFileCount );
DDX_Text( pDX, IDC_DOWNLOAD_PERCENTAGE, m_strDownloadPercentage );
DDX_Text( pDX, IDC_DOWNLOAD_STATE, m_strDownloadState );
#ifdef _USE_PARTITION_SELECT
DDX_Text( pDX, IDC_SELECT_PARTITION, m_strSelectPartition );
DDX_Text( pDX, IDC_SELECT_PARTITION_NAME, m_strSelectPartitionName );
DDX_Text( pDX, IDC_SELECT_PARTITION_GUIDE, m_strSelectPartitionGuide );
#endif // _USE_PARTITION_SELECT
// Static Text Ctrl
DDX_Control( pDX, IDC_LAUNCHER_VERSION, m_StaticLauncherVersion );
DDX_Control( pDX, IDC_FILE_NAME, m_StaticFileName );
DDX_Control( pDX, IDC_FILE_SIZE, m_StaticFileSize );
DDX_Control( pDX, IDC_TIME_LEFT, m_StaticTimeLeft );
DDX_Control( pDX, IDC_FILE_COUNT, m_StaticFileCount );
DDX_Control( pDX, IDC_DOWNLOAD_PERCENTAGE, m_StaticDownloadPercentage );
DDX_Control( pDX, IDC_DOWNLOAD_STATE, m_StaticDownloadState );
DDX_Control( pDX, IDC_DIRECT_START, m_StaticDirectGameStart );
#ifdef _USE_PARTITION_SELECT
DDX_Control( pDX, IDC_SELECT_PARTITION, m_StaticSelectPartition );
DDX_Control( pDX, IDC_SELECT_PARTITION_NAME, m_StaticSelectPartitionName );
DDX_Control( pDX, IDC_SELECT_PARTITION_GUIDE, m_StaticSelectPartitionGuide );
#endif // _USE_PARTITION_SELECT
#ifdef _USE_BITTORRENT
DDX_Control( pDX, IDC_BUTTON_DOWNLOADINFO, m_BtnDownloadInformation );
#endif // _USE_BITTORRENT
}
BEGIN_MESSAGE_MAP( CDnLauncherDlg, CDialog )
ON_WM_DESTROY()
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_ERASEBKGND()
ON_WM_CTLCOLOR()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_QUERYDRAGICON()
ON_MESSAGE( WM_STATUS_MSG, OnStatusMsg )
// Button Ctrl Click Message
ON_BN_CLICKED( IDC_CHECK_DIRECT_GAMESTART, &CDnLauncherDlg::OnClickedCheckDirectGamestart )
ON_BN_CLICKED( IDC_BTN_CANCEL, &CDnLauncherDlg::OnClickButtonCancel )
ON_BN_CLICKED( IDC_BTN_GAMESTART, &CDnLauncherDlg::OnClickButtonGameStart )
ON_BN_CLICKED( IDC_BTN_OPTION, &CDnLauncherDlg::OnClickButtonOption )
ON_BN_CLICKED( IDC_BTN_CLOSE, &CDnLauncherDlg::OnClickButtonClose )
ON_BN_CLICKED( IDC_BTN_MINIMUM, &CDnLauncherDlg::OnClickMinimumBtn )
#ifdef _USE_PARTITION_SELECT
ON_BN_CLICKED( IDC_BTN_SELECT_PARTITION, &CDnLauncherDlg::OnClickButtonSelectPartition )
ON_BN_CLICKED( IDC_BTN_START_PATCH, &CDnLauncherDlg::OnClickButtonStartPatch )
#endif // _USE_PARTITION_SELECT
#ifdef _USE_BITTORRENT
ON_BN_CLICKED( IDC_BUTTON_DOWNLOADINFO, &CDnLauncherDlg::OnClickButtonDownloadInformation )
#endif // _USE_BITTORRENT
END_MESSAGE_MAP()
void CDnLauncherDlg::OnDestroy()
{
m_vecDisplayMode.clear();
m_Font.DeleteObject();
SAFE_DELETE( m_pDownloadProgress );
SAFE_DELETE( m_pFileCountProgress );
SAFE_DELETE( m_pDownloadProgressBitmap );
SAFE_DELETE( m_pFileCountProgressBitmap );
// Thread Terminate
if( g_pPatchDownloadThread )
{
g_pPatchDownloadThread->TerminateThread();
g_pPatchDownloadThread->WaitForTerminate();
}
LogWnd::TraceLog( _T( "Thread End") );
SAFE_DELETE( g_pPatchDownloadThread );
LogWnd::DestroyLog();
CDialog::OnDestroy();
}
BOOL CDnLauncherDlg::InitFail()
{
CString strError;
strError.Format( _S( STR_LAUNCHER_INIT_FAILED + DNPATCHINFO.GetLanguageOffset() ), g_nInitErrorCode );
LogWnd::Log( LogLevel::Error, strError );
AfxMessageBox( strError );
CDialog::DestroyWindow();
return FALSE;
}
// CDnLauncherDlg message handlers
BOOL CDnLauncherDlg::OnInitDialog()
{
LogWnd::TraceLog( L"InitDialog Start!" );
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon( m_hIcon, TRUE ); // Set big icon
SetIcon( m_hIcon, FALSE ); // Set small icon
this->SetWindowText( _S( STR_DRAGONNEST_LAUNCHER + DNPATCHINFO.GetLanguageOffset() ) );
DNOPTIONDATA.LoadConfigOption( this->m_hWnd ); // Option <20>б<EFBFBD>
if( !InitInterface() ) // UI <20>ʱ<EFBFBD>ȭ
{
g_nInitErrorCode = INIT_ERROR_INTERFACE;
return InitFail();
}
if( !InitWebpage() ) // <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
{
g_nInitErrorCode = INIT_ERROR_WEBPAGE;
return InitFail();
}
#ifdef _USE_PARTITION_SELECT
#ifdef _FIRST_PATCH
InitSelectPartition();
#else // _FIRST_PATCH
DNOPTIONDATA.LoadPartitionOption( this->m_hWnd );
// <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E5BFA1><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Patch Info <20>ʱ<EFBFBD>ȭ <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if( DNOPTIONDATA.m_nSelectChannelNum > 0 && DNOPTIONDATA.m_nSelectPartitionId > 0 )
{
if( DNPATCHINFO.SetPatchInfo() )
InitSelectPartition();
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD>õǰ<C3B5> <20><><EFBFBD><EFBFBD>
{
DNOPTIONDATA.m_nSelectChannelNum = 0;
DNOPTIONDATA.m_nSelectPartitionId = 0;
DNOPTIONDATA.SavePartitionOption( this->m_hWnd );
}
}
else
DNPATCHINFO.LoadClientVersion();
#endif // _FIRST_PATCH
#endif // _USE_PARTITION_SELECT
NavigateHtml();
#if defined(_KOR) || defined(_THAI) || defined(_IDN) || defined(_CHN)
m_strLauncherVersion.Format( _T("Ver.%d"), DNPATCHINFO.GetClientVersion() ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5> <20><>Ʈ<EFBFBD><C6AE>
#else // _KOR, _THAI, _IDN
m_strLauncherVersion.Format( _T("%s Ver.%d"), _S( STR_DLG_DRAGON_NEST + DNPATCHINFO.GetLanguageOffset() ), DNPATCHINFO.GetClientVersion() ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5> <20><>Ʈ<EFBFBD><C6AE>
#endif // _KOR, _THAI, _IDN
SetTimer( TEVENT_REFRESH_TEXTINFO, 40, NULL ); //ȭ<><C8AD> <20>ؽ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
LogWnd::TraceLog( L"InitDialog Success!" );
#ifndef _USE_PARTITION_SELECT
StartPatchDownloadThread(); // <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD> <20>ٷ<EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#endif // _USE_PARTITION_SELECT
return TRUE; // return TRUE unless you set the focus to a control
}
void CDnLauncherDlg::NavigateHtml()
{
#ifdef _USE_PARTITION_SELECT
if( DNPATCHINFO.GetGuidepageUrl().GetLength() == 0 ) // <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E2BABB><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>!)
{
if( m_pDnHtmlView )
m_pDnHtmlView->Navigate( DNPATCHINFO.GetBaseGuidePageUrl() );
return;
}
#endif // _USE_PARTITION_SELECT
if( m_pDnHtmlView )
m_pDnHtmlView->Navigate( DNPATCHINFO.GetGuidepageUrl() );
}
BOOL CDnLauncherDlg::InitWebpage()
{
LogWnd::TraceLog( L"InitWebpage" );
// <20><><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> View/Html <20><><EFBFBD><EFBFBD>
CCreateContext pContext;
CWnd* pFrameWnd = this;
pContext.m_pCurrentDoc = NULL;
pContext.m_pNewViewClass = RUNTIME_CLASS( CDnView );
CDnView *pView = (CDnView*)((CFrameWnd*)pFrameWnd)->CreateView( &pContext );
if( pView == NULL )
return FALSE;
pView->ShowWindow( SW_SHOW );
pContext.m_pCurrentDoc = NULL;
pContext.m_pNewViewClass = RUNTIME_CLASS( CDnHtmlView );
m_pDnHtmlView = (CDnHtmlView*)((CFrameWnd*)pFrameWnd)->CreateView( &pContext );
if( m_pDnHtmlView == NULL )
return FALSE;
m_pDnHtmlView->ShowWindow( SW_SHOW );
m_pDnHtmlView->MoveWindow( GetControlPos( em_WebPageHtml ) );
return TRUE;
}
BOOL CDnLauncherDlg::InitInterface()
{
LogWnd::TraceLog( L"InitInterface" );
// -- Background -- //
if( !InitBackground() )
return FALSE;
// -- Control -- //
InitCtrlRect();
GetCtrlRect( m_pRectCtrl, m_nMaxCtrlNum ); // Ctrl Rect <20><><EFBFBD><EFBFBD>
InitControl();
// -- Transparent -- //
int window_style = GetWindowLong( m_hWnd, GWL_EXSTYLE );
if( !( window_style & WS_EX_LAYERED ) )
SetWindowLong( m_hWnd, GWL_EXSTYLE, window_style | WS_EX_LAYERED );
HMODULE h_user32_dll = GetModuleHandle( L"USER32.DLL" );
if( h_user32_dll != NULL )
{
BOOL (WINAPI *fp_set_layered_window_attributes)(HWND, COLORREF, BYTE, DWORD) =
(BOOL (WINAPI *)(HWND, COLORREF, BYTE, DWORD))GetProcAddress(h_user32_dll,
"SetLayeredWindowAttributes");
if( fp_set_layered_window_attributes != NULL ) // <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20>̿<EFBFBD><CCBF>ؼ<EFBFBD> SetLayeredWindowAttributes <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
(*fp_set_layered_window_attributes)( m_hWnd, RGB( 255, 0, 255 ), 0, LWA_COLORKEY );
}
return TRUE;
}
BOOL CDnLauncherDlg::InitBackground()
{
CxImage xImage;
if( !xImage.LoadResource( FindResource( NULL, MAKEINTRESOURCE( IDR_JPG_BACK_GROUND + DNPATCHINFO.GetLanguageOffset() ), L"JPG" ), CXIMAGE_FORMAT_JPG ) )
return FALSE;
HBITMAP hBmp = xImage.MakeBitmap();
if( hBmp == NULL )
return FALSE;
// set window size
BITMAP bmp = { 0 };
GetObject( hBmp, sizeof(BITMAP), &bmp );
m_dwWidth = bmp.bmWidth; // bitmap width
m_dwHeight = bmp.bmHeight; // bitmap height
// alpha color
HRGN hRgn = CreateRgnFromFile( hBmp, RGB( 255, 0, 255 ) );
// build memory dc for background
CDC* dc = GetDC();
m_dcBkGrnd = CreateCompatibleDC( dc->m_hDC );
ReleaseDC( dc );
// select background image
SelectObject( m_dcBkGrnd, hBmp );
// set window size the same as image size ( <20>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> )
//::SetWindowPos( this->GetSafeHwnd(), HWND_TOPMOST, 0, 0, m_dwWidth, m_dwHeight, SWP_NOZORDER | SWP_NOMOVE );
SetWindowPos( &wndTopMost, 0, 0, m_dwWidth, m_dwHeight, SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE );
::SetForegroundWindow( this->GetSafeHwnd() );
::SetActiveWindow( this->GetSafeHwnd() );
// assign region to window
SetWindowRgn( hRgn, FALSE );
return TRUE;
}
void CDnLauncherDlg::InitControl()
{
// Button Control
m_BtnCheckDirectGameStart.MoveWindow( m_pRectCtrl[em_CheckBox_DIrectStart] );
m_BtnCheckDirectGameStart.SetCheck( DNOPTIONDATA.m_bAutoGameStart );
m_BtnCancel.SetSkinJpg( IDR_JPG_CANCEL + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_CANCEL_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_CANCEL_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnCancel.MoveWindow( m_pRectCtrl[em_BtnQuit] );
m_BtnCancel.SetWindowText( L"" );
m_BtnStartGame.SetSkinJpg( IDR_JPG_GAMESTART + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_GAMESTART_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_GAMESTART_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnStartGame.MoveWindow( m_pRectCtrl[em_BtnStartGame] );
m_BtnStartGame.ShowWindow( SW_HIDE );
m_BtnStartGame.SetWindowText( L"" );
m_BtnGameOption.SetSkinJpg( IDR_JPG_OPTION + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_OPTION_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_OPTION_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnGameOption.MoveWindow( m_pRectCtrl[em_BtnOption] );
m_BtnGameOption.ShowWindow( SW_HIDE );
m_BtnGameOption.SetWindowText( L"" );
m_BtnClose.SetSkinJpg( IDR_JPG_CLOSE + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_CLOSE_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_CLOSE_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnClose.MoveWindow( m_pRectCtrl[em_BtnWinClose] );
m_BtnClose.SetWindowText( L"" );
m_BtnMinimum.SetSkinJpg( IDR_JPG_MINIMUM + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_MINIMUM_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_MINIMUM_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnMinimum.MoveWindow( m_pRectCtrl[em_BtnWinMiniMum] );
m_BtnMinimum.SetWindowText( L"" );
#ifdef _USE_PARTITION_SELECT
m_BtnSelectPartition.SetSkinJpg( IDR_JPG_SELECT_PARTITION + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_SELECT_PARTITION_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_SELECT_PARTITION_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnSelectPartition.MoveWindow( m_pRectCtrl[em_BtnSelectPartition] );
m_BtnSelectPartition.SetWindowText( L"" );
m_BtnStartPatch.SetSkinJpg( IDR_JPG_PARTCHSTART + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_PARTCHSTART_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_PARTCHSTART_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnStartPatch.MoveWindow( m_pRectCtrl[em_BtnStartPatch] );
m_BtnStartPatch.SetWindowText( L"" );
#endif // _USE_PARTITION_SELECT
#ifdef _USE_BITTORRENT
m_BtnDownloadInformation.SetSkinJpg( IDR_JPG_SELECT_PARTITION + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_SELECT_PARTITION_CLICK + DNPATCHINFO.GetLanguageOffset(), IDR_JPG_SELECT_PARTITION_ON + DNPATCHINFO.GetLanguageOffset() );
m_BtnDownloadInformation.MoveWindow( m_pRectCtrl[em_BtnDownloadInformation] );
m_BtnDownloadInformation.SetWindowText( L"" );
#endif // _USE_BITTORRENT
// ProgressBar Control
m_pDownloadProgressBitmap = new CBitmap();
HBITMAP hDownloadBitmap = (HBITMAP)::LoadImage( ::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_PROGRESS_DOWNLOAD), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS );
m_pDownloadProgressBitmap->Attach( hDownloadBitmap );
m_pDownloadProgress = new CSkinProgress( &m_StaticDownloadProgress, 100, m_pDownloadProgressBitmap );
m_pDownloadProgress->SetRange( 0, 100 );
m_StaticDownloadProgress.MoveWindow( m_pRectCtrl[em_DownloadProgress] );
m_StaticDownloadProgress.SetWindowText( L"" );
m_pFileCountProgressBitmap = new CBitmap();
HBITMAP hCountBitmap = (HBITMAP)::LoadImage( ::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_PROGRESS_COUNT), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS );
m_pFileCountProgressBitmap->Attach( hCountBitmap );
m_pFileCountProgress = new CSkinProgress( &m_StaticFileCountProgress, 100, m_pFileCountProgressBitmap );
m_pFileCountProgress->SetRange( 0, 100 );
m_StaticFileCountProgress.MoveWindow( m_pRectCtrl[em_FileCountProgress] );
m_StaticFileCountProgress.SetWindowText( L"" );
// Text Control
MakeFont();
SetStaticText();
}
void CDnLauncherDlg::SetStaticText()
{
m_StaticLauncherVersion.SetTextColor( m_staticBaseColor );
m_StaticLauncherVersion.SetFont( &m_Font );
m_StaticLauncherVersion.MoveWindow( m_pRectCtrl[em_Text_LauncherVersion] );
m_StaticFileName.SetTextColor( m_staticBaseColor );
m_StaticFileName.SetFont( &m_Font );
m_StaticFileName.MoveWindow( m_pRectCtrl[em_Text_FileName] );
m_StaticFileSize.SetTextColor( m_staticBaseColor );
m_StaticFileSize.SetFont( &m_Font );
m_StaticFileSize.MoveWindow( m_pRectCtrl[em_Text_FileSize] );
m_StaticTimeLeft.SetTextColor( m_staticBaseColor );
m_StaticTimeLeft.SetFont( &m_Font );
m_StaticTimeLeft.MoveWindow( m_pRectCtrl[em_Text_TimeLeft] );
m_StaticFileCount.SetTextColor( m_staticBaseColor );
m_StaticFileCount.SetFont( &m_Font );
m_StaticFileCount.MoveWindow( m_pRectCtrl[em_Text_FileCount] );
m_StaticDownloadPercentage.SetTextColor( m_staticBaseColor );
m_StaticDownloadPercentage.SetFont( &m_Font );
m_StaticDownloadPercentage.MoveWindow( m_pRectCtrl[em_Text_DownloadPercentage] );
m_StaticDownloadState.SetTextColor( m_staticBaseColor );
m_StaticDownloadState.SetFont( &m_Font );
m_StaticDownloadState.MoveWindow( m_pRectCtrl[em_Text_DownloadState] );
m_StaticDirectGameStart.SetTextColor( m_staticBaseColor );
m_StaticDirectGameStart.SetFont( &m_Font );
m_StaticDirectGameStart.MoveWindow( m_pRectCtrl[em_Text_DirectStart] );
m_StaticDirectGameStart.SetWindowText( _S( STR_AFTER_UPDATE_ATUOSTART + DNPATCHINFO.GetLanguageOffset() ) );
#ifdef _USE_PARTITION_SELECT
m_StaticSelectPartition.SetTextColor( WHITE );
m_StaticSelectPartition.SetFont( &m_Font );
m_StaticSelectPartition.MoveWindow( m_pRectCtrl[em_Text_SelectPartition] );
m_strSelectPartition = _S( STR_SELECT_PARTITION + DNPATCHINFO.GetLanguageOffset() );
m_StaticSelectPartitionName.SetTextColor( RED );
m_StaticSelectPartitionName.SetFont( &m_Font );
m_StaticSelectPartitionName.MoveWindow( m_pRectCtrl[em_Text_SelectPartitionName] );
m_StaticSelectPartitionGuide.SetTextColor( WHITE );
m_StaticSelectPartitionGuide.SetFont( &m_Font );
m_StaticSelectPartitionGuide.MoveWindow( m_pRectCtrl[em_Text_SelectPartitionGuide] );
m_strSelectPartitionGuide = _S( STR_SELECT_PARTITION_GUIDE + DNPATCHINFO.GetLanguageOffset() );
#endif // _USE_PARTITION_SELECT
}
void CDnLauncherDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage( WM_ICONERASEBKGND, reinterpret_cast<WPARAM>( dc.GetSafeHdc() ), 0 );
// Center icon in client rectangle
int cxIcon = GetSystemMetrics( SM_CXICON );
int cyIcon = GetSystemMetrics( SM_CYICON );
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon( x, y, m_hIcon );
}
else
{
CDialog::OnPaint();
}
}
HBRUSH CDnLauncherDlg::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor )
{
HBRUSH hbr = CDialog::OnCtlColor( pDC, pWnd, nCtlColor );
RECT rect;
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
// case CTLCOLOR_EDIT:
// case CTLCOLOR_LISTBOX:
// case CTLCOLOR_SCROLLBAR:
{
pDC->SetBkMode(TRANSPARENT);
pWnd->GetWindowRect(&rect);
RedrawWindow(&rect);
return (HBRUSH)GetStockObject(NULL_BRUSH);;
}
break;
}
return hbr;
}
BOOL CDnLauncherDlg::OnEraseBkgnd( CDC* pDC )
{
BitBlt( pDC->m_hDC, 0, 0, m_dwWidth, m_dwHeight, m_dcBkGrnd, 0, 0, SRCCOPY );
return FALSE;
}
HCURSOR CDnLauncherDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CDnLauncherDlg::OnLButtonDown( UINT nFlags, CPoint point )
{
if( !(m_dwFlags & DRAGGING) )
{
m_pntMouse = point;
m_dwFlags |= DRAGGING;
SetCapture();
}
CDialog::OnLButtonDown( nFlags, point );
}
void CDnLauncherDlg::OnLButtonUp( UINT nFlags, CPoint point )
{
if( m_dwFlags & DRAGGING )
{
m_dwFlags &= ~DRAGGING;
ReleaseCapture();
}
CDialog::OnLButtonUp( nFlags, point );
}
void CDnLauncherDlg::OnMouseMove( UINT nFlags, CPoint point )
{
if ( m_dwFlags & DRAGGING )
{
RECT rect;
GetWindowRect( &rect );
rect.left += point.x - m_pntMouse.x;
rect.top += point.y - m_pntMouse.y;
SetWindowPos( &wndTopMost, rect.left, rect.top, 0, 0, SWP_NOZORDER | SWP_NOSIZE );
SendMessage( WM_PAINT );
}
CDialog::OnMouseMove( nFlags, point );
}
void CDnLauncherDlg::OnClickedCheckDirectGamestart()
{
if( m_BtnCheckDirectGameStart.GetCheck() != DNOPTIONDATA.m_bAutoGameStart )
{
DNOPTIONDATA.m_bAutoGameStart = m_BtnCheckDirectGameStart.GetCheck();
DNOPTIONDATA.SaveConfigOption( this->m_hWnd );
}
}
void CDnLauncherDlg::OnClickButtonCancel()
{
int nResult = AfxMessageBox( _S( STR_PATCH_CANCEL + DNPATCHINFO.GetLanguageOffset() ), MB_YESNO );
if ( nResult == IDYES && m_emDownloadPatchState != PATCH_COMPLETE ) // Ȯ<><C8AE>â <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD> <20><>ġ<EFBFBD>Ϸ<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
if( g_pPatchDownloadThread )
{
g_pPatchDownloadThread->TerminateThread();
g_pPatchDownloadThread->WaitForTerminate();
SAFE_DELETE( g_pPatchDownloadThread );
g_pPatchDownloadThread = NULL;
}
LogWnd::TraceLog(_T("<EFBFBD><EFBFBD> Patch Canceled"));
#ifdef _USE_PARTITION_SELECT
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartPatch.ShowWindow( SW_SHOW );
#else // _USE_PARTITION_SELECT
CDialog::OnCancel();
#endif // _USE_PARTITION_SELECT
}
}
void CDnLauncherDlg::EnableStartButton()
{
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartGame.ShowWindow( SW_SHOW );
m_BtnGameOption.ShowWindow( SW_SHOW );
}
void CDnLauncherDlg::OnClickButtonGameStart()
{
// <20>ּ<EFBFBD> <20>޸<EFBFBD><DEB8><EFBFBD> <20>˻<EFBFBD>
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx( &statex );
if( statex.ullAvailPhys < 800000000 ) // <20><><EFBFBD><EFBFBD><EBB0A1> <20>޸<EFBFBD><DEB8><EFBFBD> 800<30>ް<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD> <20><><EFBFBD><EFBFBD>
{
AfxMessageBox( _S( STR_WARNNING_AVAILABLE_MEMORY + DNPATCHINFO.GetLanguageOffset() ), MB_OK );
LogWnd::Log( LogLevel::Error, L"Warnning! Check Available Memory." );
}
CString strExeFile = DNPATCHINFO.GetClientPath();
strExeFile += DNCLIENT_NAME;
DNOPTIONDATA.SaveConfigOption( this->m_hWnd );
#ifdef _USE_PARTITION_SELECT
DNOPTIONDATA.SavePartitionOption( this->m_hWnd );
#endif // _USE_PARTITION_SELECT
ShellExecute( m_hWnd, NULL, strExeFile.GetBuffer(), DNPATCHINFO.GetTotalParameter().GetBuffer(), NULL, SW_SHOWNORMAL );
#ifdef _USE_AUTOUPDATE // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
int nNextVersion = DNPATCHINFO.GetNextVersion();
LogWnd::Log( LogLevel::Info, L"Check Next Version Ver:%d, Server Ver:%d", nNextVersion, DNPATCHINFO.GetServerVersion() );
if( nNextVersion > 0 && nNextVersion > DNPATCHINFO.GetServerVersion() )
{
CString strAutoupdateParameter;
strAutoupdateParameter.Format( L"%s|%s|%d-%d", DNPATCHINFO.GetPatchUrl(), DNPATCHINFO.GetClientPath(), DNPATCHINFO.GetServerVersion()+1, nNextVersion );
CString strAutoUpdateExe = DNPATCHINFO.GetClientPath();
strAutoUpdateExe += DNAUTOUPDATE_NAME;
LogWnd::Log( LogLevel::Info, L"Execute AutoUpdate.exe %s", strAutoUpdateExe.GetBuffer( 0 ) );
ShellExecute( m_hWnd, NULL, strAutoUpdateExe, strAutoupdateParameter, NULL, SW_SHOWNORMAL );
}
#endif // _USE_AUTOUPDATE
Sleep( 1000 ); // 1<><31><EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
CDialog::OnOK();
}
void CDnLauncherDlg::OnClickButtonOption()
{
CDnOptionDlg dlg( this );
INT_PTR nResponse = dlg.DoModal();
}
void CDnLauncherDlg::OnClickButtonClose()
{
int nResult = AfxMessageBox( _S( STR_LAUNCHER_EXIT + DNPATCHINFO.GetLanguageOffset() ), MB_YESNO );
if( nResult == IDYES )
{
LogWnd::TraceLog(_T("<EFBFBD><EFBFBD> Launcher Closed"));
CDialog::OnCancel();
}
}
void CDnLauncherDlg::OnClickMinimumBtn()
{
ShowWindow( SW_SHOWMINIMIZED );
}
#ifdef _USE_PARTITION_SELECT
void CDnLauncherDlg::OnClickButtonStartPatch()
{
if( !m_bDownloading && DNPATCHINFO.IsSetPatchInfo() )
{
int nResult = AfxMessageBox( _S( STR_PATCH_START + DNPATCHINFO.GetLanguageOffset() ), MB_YESNO );
if( nResult == IDYES )
{
m_BtnCancel.ShowWindow( SW_SHOW );
m_BtnStartPatch.ShowWindow( SW_HIDE );
StartPatchDownloadThread();
}
}
else
ErrorMessageBoxLog( _S( STR_MUST_SELECT_PARTITION + DNPATCHINFO.GetLanguageOffset() ) );
}
void CDnLauncherDlg::OnClickButtonSelectPartition()
{
if( !m_bDownloading )
{
// Open Server Select Page.
CDnSelectPartitionDlg DnSelectPartitionDlg( this );
WCHAR szUrl[4096]={0,};
TCHAR szCurDir[ _MAX_PATH ]={0,};
GetCurrentDirectory( _MAX_PATH, szCurDir );
swprintf_s( szUrl , _T("%s\\Html\\HTMLPage1.htm"), szCurDir );
DnSelectPartitionDlg.SetURL(szUrl);
DnSelectPartitionDlg.DoModal();
}
}
void CDnLauncherDlg::SetSelectPartition( int nSelectChannelNum, int nSelectPartitionNum )
{
DNOPTIONDATA.m_nSelectChannelNum = nSelectChannelNum;
DNOPTIONDATA.m_nSelectPartitionId = DNPATCHINFO.GetPartitionId( nSelectChannelNum, nSelectPartitionNum );
if( !DNPATCHINFO.SetPatchInfo() )
return;
DNOPTIONDATA.SavePartitionOption( this->m_hWnd );
#ifdef _FIRST_PATCH
CheckVersionAndReboot();
#else
InitSelectPartition();
#endif
m_pDnHtmlView->Navigate( DNPATCHINFO.GetGuidepageUrl() );
}
#ifdef _FIRST_PATCH
void CDnLauncherDlg::SetOnlySelectPartition( int nSelectChannelNum, int nSelectPartitionNum )
{
//----------------------------------------------
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><20>Ѵ<EFBFBD>.
DNOPTIONDATA.m_nSelectChannelNum = nSelectChannelNum;
DNOPTIONDATA.m_nSelectPartitionId = DNPATCHINFO.GetPartitionId( nSelectChannelNum, nSelectPartitionNum );
if( !DNPATCHINFO.SetPatchInfo() )
{
return;
}
DNOPTIONDATA.SavePartitionOption( this->m_hWnd );
}
void CDnLauncherDlg::CheckVersionAndReboot()
{
// <20>ٲ<EFBFBD> <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ
// <20><><EFBFBD><EFBFBD> <20><>Ŭ<EFBFBD><C5AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ư Ȱ<><C8B0>ȭ
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> Full Client <20><>ġ <20><>û <20>޼<EFBFBD><DEBC><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><>ġ <20><><EFBFBD><EFBFBD> <20><>ư Ȱ<><C8B0>ȭ
/*
----------- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <EFBFBD><EFBFBD><EFBFBD><EFBFBD> -----------
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD> ( <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> == <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD>ġ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҋ<EFBFBD> ( <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD> == <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ) <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD> "<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E7BCB1>"<EFBFBD>ؼ<EFBFBD>, [<EFBFBD><EFBFBD>ó <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>] --> [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ]<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <EFBFBD>Ǹ<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̹<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <EFBFBD>˴ϴ<EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
ex) <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD>ϰ<EFBFBD>, <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> PatchStart<EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ʰ<EFBFBD>, <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
ex) Server 100 , Module 100 , Launcher 50
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
<EFBFBD>̷<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ҷ<EFBFBD><EFBFBD><EFBFBD>, Module<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <EFBFBD>ٲ<EFBFBD><EFBFBD>ݴϴ<EFBFBD>..
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD>==<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ֱ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD>ϴ<EFBFBD>. ( <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>׻<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ƾ<EFBFBD> <EFBFBD>մϴ<EFBFBD> )
<EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD>ٽ<EFBFBD> <EFBFBD>Ѵ<EFBFBD><EFBFBD>ص<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><EFBFBD><EFBFBD> ũ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ٲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ʽ<EFBFBD><EFBFBD>ϴ<EFBFBD>..
*/
int nClientVersion = DNPATCHINFO.GetClientVersion();
int nSereverVersion = DNPATCHINFO.GetServerVersion();
if( nClientVersion == nSereverVersion )
{
LogWnd::TraceLog( _T("Current Version is latest version") );
OnStatusMsg( PATCH_COMPLETE, 0 );
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartPatch.ShowWindow( SW_HIDE );
m_pDownloadProgress->SetRange( 0, 100 );
m_pDownloadProgress->SetPos( 100 );
m_pFileCountProgress->SetRange( 0, 100 );
m_pFileCountProgress->SetPos( 100 );
m_strDownloadPercentage.Format( _T("%d%%"), 100 );
if( DNOPTIONDATA.m_bAutoGameStart ) // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>Ѵ<EFBFBD>.
OnClickButtonGameStart();
}
else if( nClientVersion > nSereverVersion )
{
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartPatch.ShowWindow( SW_HIDE );
m_BtnStartGame.ShowWindow( SW_HIDE );
AfxMessageBox( _S( STR_ERROR_CLIENT_VERSION + DNPATCHINFO.GetLanguageOffset() ), MB_OK );
}
else if( nClientVersion < nSereverVersion )
{
// <20><>ó <20><><EFBFBD><EFBFBD>Ʈ <20><>ŵ<EFBFBD>ϴ<EFBFBD>.
int nCurModuleVersion = DNFIRSTPATCHINFO.GetLocalModuleVersion();
int nCurClientVersion = DNPATCHINFO.GetClientVersion();
if( nCurModuleVersion > nCurClientVersion )
nCurModuleVersion = nCurClientVersion;
BOOL bSaveResult = SaveModuleVersion( nCurModuleVersion );
if(bSaveResult)
{
CString strParam = DNPATCHINFO.GetTotalParameter(); // <20>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
CString strExeFile = DNPATCHINFO.GetClientPath(); // <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20><><EFBFBD><EFBFBD>
strExeFile += DNLAUNCHER_NAME;
#ifdef _USE_COMMAND_LINE
ShellExecute( m_hWnd, NULL, strExeFile, g_szOriginalCmdLine.GetBuffer(), NULL, SW_SHOWNORMAL );
#else
ShellExecute( m_hWnd, NULL, strExeFile, strParam.GetBuffer(), NULL, SW_SHOWNORMAL );
#endif
KillMyProcess(_T(DNLAUNCHER_NAME)); // old<6C><64><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> kill.
}
else
{
ErrorMessageBoxLog( _S( STR_PATCH_FAILED+DNPATCHINFO.GetLanguageOffset() ) );
}
}
}
BOOL CDnLauncherDlg::SaveModuleVersion( int nVersion )
{
//------------------------------------------
// version.cfg<66><67> <20><><EFBFBD><EFBFBD>..
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CString szPath;
szPath = DNPATCHINFO.GetClientPath();
szPath += CLIENT_VERSION_NAME;
char* buffer = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
hFile = CreateFile( szPath.GetBuffer(), GENERIC_WRITE, FILE_SHARE_READ , NULL, CREATE_ALWAYS , FILE_ATTRIBUTE_NORMAL,NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
LogWnd::Log( LogLevel::Error, L"Save Version File Failed!" );
return FALSE;
}
char szVersion[ 256 ]= {0,};
DWORD dwWriteSize;
sprintf_s( szVersion, sizeof(szVersion), "Version %d\r\nModule %d", DNPATCHINFO.GetClientVersion(), nVersion );
WriteFile( hFile, szVersion,(int)strlen(szVersion)+1 , &dwWriteSize, NULL );
CloseHandle(hFile);
//------------------------------------------
// Pak <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>.
CString szFindPackingFile;
szFindPackingFile = DNPATCHINFO.GetClientPath();
szFindPackingFile += _T("Resource00.pak");
CEtPackingFile *pPackingFile = new CEtPackingFile();
char strVersion[256]={0,};
sprintf_s( strVersion, sizeof(strVersion), "version %d\r\nModule %d", DNPATCHINFO.GetClientVersion(), nVersion );
USES_CONVERSION;
char szTemp[ _MAX_PATH ] = {0,};
char StrVersionName[32]= "\\version.cfg";
WideCharToMultiByte( CP_ACP, 0, szFindPackingFile.GetBuffer(), -1, szTemp, _MAX_PATH, NULL, NULL );
// <20><>¿<EFBFBD><C2BF> <20><><EFBFBD><EFBFBD>. 512M <20>Ѿ<D1BE>°<EFBFBD><C2B0>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD>.
if( pPackingFile->OpenFileSystem( szTemp ) )
{
pPackingFile->Remove( StrVersionName );
pPackingFile->AddFile( StrVersionName, strVersion, sizeof(strVersion) );
}
else
{
AfxMessageBox( _T("Version can not be saved") );
SAFE_DELETE( pPackingFile );
return FALSE;
}
pPackingFile->CloseFileSystem();
SAFE_DELETE( pPackingFile );
return TRUE;
}
#endif
void CDnLauncherDlg::InitSelectPartition()
{
ResetDownloadInfo();
m_strSelectPartitionName = DNPATCHINFO.GetPartitionName();
m_strSelectPartition = _S( STR_SELECT_PARTITION + DNPATCHINFO.GetLanguageOffset() );
m_strSelectPartitionGuide = _S( STR_SELECT_PARTITION_GUIDE + DNPATCHINFO.GetLanguageOffset() );
GetDlgItem( IDC_SELECT_PARTITION_NAME )->ShowWindow( SW_SHOW );
GetDlgItem( IDC_SELECT_PARTITION_GUIDE )->ShowWindow( SW_SHOW );
CheckVersion();
}
void CDnLauncherDlg::CheckVersion()
{
// <20>ٲ<EFBFBD> <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ
// <20><><EFBFBD><EFBFBD> <20><>Ŭ<EFBFBD><C5AC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ư Ȱ<><C8B0>ȭ
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> Full Client <20><>ġ <20><>û <20>޼<EFBFBD><DEBC><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><>ġ <20><><EFBFBD><EFBFBD> <20><>ư Ȱ<><C8B0>ȭ
int nClientVersion = DNPATCHINFO.GetClientVersion();
int nSereverVersion = DNPATCHINFO.GetServerVersion();
if( nClientVersion == nSereverVersion )
{
LogWnd::TraceLog( _T("Current Version is latest version") );
OnStatusMsg( PATCH_COMPLETE, 0 );
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartPatch.ShowWindow( SW_HIDE );
m_pDownloadProgress->SetRange( 0, 100 );
m_pDownloadProgress->SetPos( 100 );
m_pFileCountProgress->SetRange( 0, 100 );
m_pFileCountProgress->SetPos( 100 );
m_strDownloadPercentage.Format( _T("%d%%"), 100 );
if( DNOPTIONDATA.m_bAutoGameStart ) // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>Ѵ<EFBFBD>.
OnClickButtonGameStart();
}
else if( nClientVersion > nSereverVersion )
{
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartPatch.ShowWindow( SW_HIDE );
m_BtnStartGame.ShowWindow( SW_HIDE );
AfxMessageBox( _S( STR_ERROR_CLIENT_VERSION + DNPATCHINFO.GetLanguageOffset() ), MB_OK );
}
else if( nClientVersion < nSereverVersion )
{
m_BtnCancel.ShowWindow( SW_HIDE );
m_BtnStartPatch.ShowWindow( SW_SHOW );
m_BtnStartPatch.EnableWindow( TRUE );
m_BtnStartGame.ShowWindow( SW_HIDE );
m_BtnGameOption.ShowWindow( SW_HIDE );
OnStatusMsg( PATCH_NONE, 0 );
}
}
#endif // _USE_PARTITION_SELECT
void CDnLauncherDlg::OnTimer( UINT_PTR nIDEvent )
{
if( nIDEvent == TEVENT_REFRESH_TEXTINFO ) // ȭ<><C8AD> <20>ؽ<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
RefreshTextInfo();
CDialog::OnTimer(nIDEvent);
}
void CDnLauncherDlg::StartPatchDownloadThread()
{
if( g_pPatchDownloadThread == NULL )
{
g_pPatchDownloadThread = new CDnPatchDownloadThread();
g_pPatchDownloadThread->SetWindowHandle( GetSafeHwnd() );
g_pPatchDownloadThread->Start();
}
}
void CDnLauncherDlg::CtlEraseBkgnd( int nCtlID )
{
RECT rect;
GetDlgItem( nCtlID )->GetWindowRect( &rect );
this->ScreenToClient( &rect );
InvalidateRect( &rect );
}
void CDnLauncherDlg::RefreshTextInfo()
{
UpdateDownloadInfo();
CString str;
GetDlgItem( IDC_LAUNCHER_VERSION )->GetWindowText( str );
if( str != m_strLauncherVersion ) CtlEraseBkgnd( IDC_LAUNCHER_VERSION );
GetDlgItem( IDC_FILE_NAME )->GetWindowText( str );
if( str != m_strFileName ) CtlEraseBkgnd( IDC_FILE_NAME );
GetDlgItem( IDC_FILE_SIZE )->GetWindowText( str );
if( str != m_strFileSize ) CtlEraseBkgnd( IDC_FILE_SIZE );
GetDlgItem( IDC_TIME_LEFT )->GetWindowText( str );
if( str != m_strTimeLeft ) CtlEraseBkgnd( IDC_TIME_LEFT );
GetDlgItem( IDC_FILE_COUNT )->GetWindowText( str );
if( str != m_strFileCount ) CtlEraseBkgnd( IDC_FILE_COUNT );
GetDlgItem( IDC_DOWNLOAD_PERCENTAGE )->GetWindowText( str );
if( str != m_strDownloadPercentage ) CtlEraseBkgnd( IDC_DOWNLOAD_PERCENTAGE );
GetDlgItem( IDC_DOWNLOAD_STATE )->GetWindowText( str );
if( str != m_strDownloadState ) CtlEraseBkgnd( IDC_DOWNLOAD_STATE );
#ifdef _USE_PARTITION_SELECT
GetDlgItem( IDC_SELECT_PARTITION )->GetWindowText( str );
if( str != m_strSelectPartition ) CtlEraseBkgnd( IDC_SELECT_PARTITION );
GetDlgItem( IDC_SELECT_PARTITION_NAME )->GetWindowText( str );
if( str != m_strSelectPartitionName ) CtlEraseBkgnd( IDC_SELECT_PARTITION_NAME );
GetDlgItem( IDC_SELECT_PARTITION_GUIDE )->GetWindowText( str );
if( str != m_strSelectPartitionGuide ) CtlEraseBkgnd( IDC_SELECT_PARTITION_GUIDE );
#endif // _USE_PARTITION_SELECT
UpdateData( FALSE );
}
LRESULT CDnLauncherDlg::OnStatusMsg( WPARAM wParam, LPARAM lParam )
{
m_emDownloadPatchState = static_cast<DownloadPatchState>(wParam);
if( g_DownloadStateString[m_emDownloadPatchState].nStringID + DNPATCHINFO.GetLanguageOffset() != -1 )
{
#if !defined(_KOR) || !defined(_IDN) || !defined(_CHN)
m_strDownloadState = _S( g_DownloadStateString[m_emDownloadPatchState].nStringID + DNPATCHINFO.GetLanguageOffset() );
#endif // _KOR, _IDN
}
UpdateDownloadInfo();
switch( m_emDownloadPatchState )
{
case PATCH_NONE:
ResetDownloadInfo();
m_bDownloading = FALSE;
break;
case PATCH_CHECK_VERSION:
m_bDownloading = TRUE;
break;
case PATCH_COMPLETE:
{
EnableStartButton();
SAFE_DELETE( g_pPatchDownloadThread );
m_pDownloadProgress->SetRange( 0, 100 );
m_pDownloadProgress->SetPos( 100 );
m_pFileCountProgress->SetRange( 0, 100 );
m_pFileCountProgress->SetPos( 100 );
m_strDownloadPercentage.Format( _T("%d%%"), 100 );
if( DNOPTIONDATA.m_bAutoGameStart ) // <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20>Ѵ<EFBFBD>.
OnClickButtonGameStart();
m_bDownloading = FALSE;
}
break;
case PATCH_FAILED:
case PATCH_TERMINATE:
{
SAFE_DELETE( g_pPatchDownloadThread );
m_bDownloading = FALSE;
}
break;
case PATCH_LAUNCHER:
{
CDialog::DestroyWindow();
m_bDownloading = FALSE;
}
break;
}
return 0;
}
void CDnLauncherDlg::ResetDownloadInfo()
{
m_strFileName.Empty();
m_strFileSize.Empty();
m_strTimeLeft.Empty();
m_strFileCount.Empty();
m_strDownloadPercentage.Empty();
m_strDownloadState.Empty();
if( m_pDownloadProgress )
{
m_pDownloadProgress->SetRange( 0, 100 );
m_pDownloadProgress->SetPos( 0 );
}
if( m_pFileCountProgress )
{
m_pFileCountProgress->SetRange( 0, 100 );
m_pFileCountProgress->SetPos( 0 );
}
}
void CDnLauncherDlg::UpdateDownloadInfo()
{
// <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20><> - <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD> ǥ<><C7A5>
if( m_emDownloadPatchState == PATCH_DOWNLOAD_DATA || m_emDownloadPatchState == PATCH_MD5_CHECK
|| m_emDownloadPatchState == PATCH_APPLY_PAK_FILE )
{
#if defined(_KOR) || defined(_IDN) || defined(_CHN)
if( g_DownloadInfoData.m_strFileName.GetLength() > 0 )
m_strFileName = g_DownloadInfoData.m_strFileName;
if( g_DownloadInfoData.m_nFileSize > 0 )
m_strFileSize = GetAdjustFileSize( (double)g_DownloadInfoData.m_nFileSize );
#else // _KOR, _IDN
if( g_DownloadInfoData.m_strFileName.GetLength() > 0 )
m_strFileName.Format( _T("%s:%s"), _S( STR_DLG_FILENAME + DNPATCHINFO.GetLanguageOffset() ), g_DownloadInfoData.m_strFileName );
if( g_DownloadInfoData.m_nFileSize > 0 )
m_strFileSize.Format( _T("%s:%s"), _S( STR_DLG_FILE_SIZE + DNPATCHINFO.GetLanguageOffset() ), GetAdjustFileSize( (double)g_DownloadInfoData.m_nFileSize ) );
#endif // _KOR, _IDN
m_fDownloadRate = g_DownloadInfoData.m_fDownloadRate;
UpdateDownloadLeftTime();
// <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20><> - <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD><EFBFBD><EFBFBD>
m_nDownloadProgressMin = g_DownloadInfoData.m_nDownloadProgressMin;
m_nDownloadProgressMax = g_DownloadInfoData.m_nDownloadProgressMax;
m_nCurrentFileCount = g_DownloadInfoData.m_nCurrentFileCount;
m_nTotalFileCount = g_DownloadInfoData.m_nTotalFileCount;
UpdatProgressInfo();
}
#if defined (_KOR) || defined(_IDN) || defined(_CHN)
if( g_DownloadStateString[m_emDownloadPatchState].nStringID != -1 )
{
if( m_nCurrentFileCount > 0 && m_nTotalFileCount > 0 )
{
CString strCount;
strCount.Format( _T("(%d/%d)"), m_nCurrentFileCount, m_nTotalFileCount );
m_strDownloadState.Format( _T("%s %s"), _S( g_DownloadStateString[m_emDownloadPatchState].nStringID ), strCount );
}
else
{
m_strDownloadState = _S( g_DownloadStateString[m_emDownloadPatchState].nStringID );
}
}
#endif // _KOR, _IDN
#if defined(_KOR) || defined(_THAI) || defined(_IDN) || defined(_CHN)
// <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20>Ϸ<EFBFBD> <20><>
if( m_emDownloadPatchState == PATCH_APPLY_PAK_FILE_END )
m_strLauncherVersion.Format( _T("Ver.%d"), DNPATCHINFO.GetClientVersion() );
#else // _KOR, _THAI, _IDN
// <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20>Ϸ<EFBFBD> <20><>
if( m_emDownloadPatchState == PATCH_APPLY_PAK_FILE_END )
m_strLauncherVersion.Format( _T("%s Ver.%d"), _S( STR_DLG_DRAGON_NEST + DNPATCHINFO.GetLanguageOffset() ), DNPATCHINFO.GetClientVersion() );
#endif // _KOR, _THAI, _IDN
}
void CDnLauncherDlg::UpdatProgressInfo()
{
if( m_pDownloadProgress == NULL || m_pFileCountProgress == NULL )
return;
if( m_nDownloadProgressMax == 0 || m_nTotalFileCount == 0 ) // error divide by zero
return;
// <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD><EFBFBD><EFBFBD> & %ǥ<><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
m_pFileCountProgress->SetRange( 0, 100 );
int nDownloadPercentage = 0;
if( m_emDownloadPatchState == PATCH_DOWNLOAD_DATA || PATCH_APPLY_PAK_FILE )
nDownloadPercentage = static_cast<int>( (100 * m_nDownloadProgressMin) / m_nDownloadProgressMax );
else if( m_emDownloadPatchState == PATCH_MD5_CHECK )
nDownloadPercentage = 100;
if( nDownloadPercentage < 0 ) nDownloadPercentage = 0;
if( nDownloadPercentage > 100 ) nDownloadPercentage = 100;
m_strDownloadPercentage.Format( _T("%d%%"), nDownloadPercentage );
m_pDownloadProgress->SetPos( nDownloadPercentage );
// <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ (<28><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 100<30><30><EFBFBD><EFBFBD> <20>ɰ<EFBFBD> 50<35><30> <20>ٿ<EFBFBD><D9BF>ε<EFBFBD> 50<35><30> <20><>ŷ<EFBFBD><C5B7><EFBFBD><20>Ҵ<EFBFBD>)
m_pFileCountProgress->SetRange( 0, m_nTotalFileCount * 100 ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 100<30><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int nCurrentFileCountPercentage = 0;
if( m_emDownloadPatchState == PATCH_DOWNLOAD_DATA || m_emDownloadPatchState == PATCH_MD5_CHECK )
nCurrentFileCountPercentage = ((m_nCurrentFileCount - 1) * 100) + (nDownloadPercentage / 2);
else if( m_emDownloadPatchState == PATCH_APPLY_PAK_FILE )
nCurrentFileCountPercentage = ((m_nCurrentFileCount - 1) * 100) + (nDownloadPercentage / 2) + 50;
if( nCurrentFileCountPercentage < 0 ) nCurrentFileCountPercentage = 0;
if( nCurrentFileCountPercentage > m_nTotalFileCount * 100 ) nCurrentFileCountPercentage = m_nTotalFileCount * 100;
m_pFileCountProgress->SetPos( nCurrentFileCountPercentage );
m_strFileCount.Format( _T("%d/%d"), m_nCurrentFileCount, m_nTotalFileCount );
#if defined(_KOR) || defined(_IDN) || defined(_CHN)
nDownloadPercentage = static_cast<int>( (100 * nCurrentFileCountPercentage) / ( m_nTotalFileCount * 100 ) );
if( nDownloadPercentage < 0 ) nDownloadPercentage = 0;
if( nDownloadPercentage > 100 ) nDownloadPercentage = 100;
m_strDownloadPercentage.Format( _T("%d%%"), nDownloadPercentage );
m_strFileCount = L"";
#endif // _KOR, _IDN
}
CString CDnLauncherDlg::GetAdjustFileSize( double size )
{
CString str;
#ifdef _CHN
if( size >= 1024 * 1024 )
str.Format( _T("%.1f M") , size / (1024.0f * 1024.0f) );
else if( size >= 1024 )
str.Format( _T("%.1f K") , size / 1024.0f );
else
str.Format( _T("%d B") , size );
#else // _CHN
if( size >= 1024 * 1024 )
str.Format( _T("%.1f MB") , size / (1024.0f * 1024.0f) );
else if( size >= 1024 )
str.Format( _T("%.1f KB") , size / 1024.0f );
else
str.Format( _T("%d B") , size );
#endif // _CHN
return str;
}
void CDnLauncherDlg::UpdateDownloadLeftTime()
{
if( m_fDownloadRate > 0 )
{
// KB/s <20>̹Ƿ<CCB9> 1000<30><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
int nEstimateTimeLeft = static_cast<int>( static_cast<float>( m_nDownloadProgressMax - m_nDownloadProgressMin ) / m_fDownloadRate / 1000.0f );
if( nEstimateTimeLeft > 3600 )
{
int nHour = nEstimateTimeLeft / 3600;
int nMin = (nEstimateTimeLeft - (nHour * 3600)) / 60;
int nSec = nEstimateTimeLeft - (nHour * 3600) - (nMin * 60);
m_strTimeLeft.Format( _S( STR_DLG_TIME_HOUR_MIN_SEC + DNPATCHINFO.GetLanguageOffset() ), nHour, nMin, nSec );
}
else if( nEstimateTimeLeft <= 3600 && nEstimateTimeLeft > 60 )
{
int nMin = nEstimateTimeLeft / 60;
int nSec = nEstimateTimeLeft - (nMin * 60);
m_strTimeLeft.Format( _S( STR_DLG_TIME_MIN_SEC + DNPATCHINFO.GetLanguageOffset() ), nMin, nSec );
}
else
m_strTimeLeft.Format( _S( STR_DLG_TIME_SEC + DNPATCHINFO.GetLanguageOffset() ), nEstimateTimeLeft );
}
}
#ifdef _USE_BITTORRENT
void CDnLauncherDlg::OnClickButtonDownloadInformation()
{
CDnDownloadInformationDlg DnDownloadInformationDlg;
DnDownloadInformationDlg.DoModal();
}
#endif // _USE_BITTORRENT
BOOL CDnLauncherDlg::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN )
{
if(m_BtnStartGame && m_BtnStartGame.IsWindowVisible())
{
OnClickButtonGameStart();
return true;
}
return true;
}
if( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE )
{
if(m_BtnClose && m_BtnClose.IsWindowVisible())
{
OnClickButtonClose();
return true;
}
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}