
// PublicDNSPluginConfig.cpp : Определяет поведение классов для приложения.
//

#include "stdafx.h"
#include "PublicDNSPluginConfig.h"
#include "PublicDNSPluginConfigDlg.h"
#include "Trace.h"
#include "PublicDNSPluginConfig.tmh"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CPublicDNSPluginConfigApp

BEGIN_MESSAGE_MAP(CPublicDNSPluginConfigApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// создание CPublicDNSPluginConfigApp

CPublicDNSPluginConfigApp::CPublicDNSPluginConfigApp()
: m_sModuleFileName(_T(""))
, m_sVersionHTMLString(_T(""))
, m_qwFileVersion(0)
, m_pMainDialog(NULL)
, m_sModuleFolder(_T(""))
, m_sCopyRightDates(_T("2006-2014"))
, m_sDnsLauncherFileName(_T(""))
{
    WPP_INIT_TRACING(L"PublicDNSPluginConfig");
    // поддержка диспетчера перезагрузки
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: добавьте код создания,
	// Размещает весь важный код инициализации в InitInstance
}


// Единственный объект CPublicDNSPluginConfigApp

CPublicDNSPluginConfigApp theApp;


// инициализация CPublicDNSPluginConfigApp

BOOL CPublicDNSPluginConfigApp::InitInstance()
{
    TCHAR   sModuleFileName[260];
    DWORD   dwVerInfoLen = 0, dwVerHandle = 1;
    PVOID   pVerInfoData;
    TCHAR   sBS[2] = { _T('\\'), 0 };
    VS_FIXEDFILEINFO* pFileVerInfo = NULL;
    UINT    nFILen = 0;
    DWORD   anFileVersion[4];
    int     nCharPos;
    _tsetlocale(LC_ALL, _T("Russian"));
	// InitCommonControlsEx() требуется для Windows XP, если манифест
	// приложения использует ComCtl32.dll версии 6 или более поздней версии для включения
	// стилей отображения. В противном случае будет возникать сбой при создании любого окна.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// Выберите этот параметр для включения всех общих классов управления, которые необходимо использовать
	// в вашем приложении.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);
	CWinApp::InitInstance();
	//if (!AfxSocketInit())
	//{
	//	AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
	//	return FALSE;
	//}
	AfxEnableControlContainer();
	// Создать диспетчер оболочки, в случае, если диалоговое окно содержит
	// представление дерева оболочки или какие-либо его элементы управления.
	//CShellManager *pShellManager = new CShellManager;
	// Стандартная инициализация
	// Если эти возможности не используются и необходимо уменьшить размер
	// конечного исполняемого файла, необходимо удалить из следующих
	// конкретных процедур инициализации, которые не требуются
	// Измените раздел реестра, в котором хранятся параметры
	// TODO: следует изменить эту строку на что-нибудь подходящее,
	// например на название организации
	SetRegistryKey(_T("Real Time Systems DD\\Public DNS WS System"));
    if(GetModuleFileName(
        NULL,
        sModuleFileName,
        sizeof sModuleFileName / sizeof TCHAR
        ) == 0 )
    {
        return FALSE;
    }
    m_sModuleFileName = sModuleFileName;
    nCharPos = m_sModuleFileName.ReverseFind(_T('\\'));
    m_sModuleFolder = m_sModuleFileName.Left(nCharPos);
    m_sDnsLauncherFileName = m_sModuleFolder + _T("\\DnsDbgLauncher.exe");
    dwVerInfoLen = GetFileVersionInfoSize(
        sModuleFileName,
        &dwVerHandle
        );
    if(dwVerInfoLen == 0) {
        return FALSE;
    }
    pVerInfoData = _alloca(dwVerInfoLen);
    if(!GetFileVersionInfo(
        sModuleFileName,
        dwVerHandle,
        dwVerInfoLen,
        pVerInfoData
        ))
    {
        return FALSE;
    }
    if(!VerQueryValue(
        pVerInfoData,
        sBS,
        (LPVOID*)&pFileVerInfo,
        &nFILen
        ))
    {
        return FALSE;
    }
    m_qwFileVersion = pFileVerInfo->dwFileVersionMS;
    m_qwFileVersion = (m_qwFileVersion << 32) | pFileVerInfo->dwFileVersionLS;
    anFileVersion[0] = pFileVerInfo->dwFileVersionMS >> 16;
    anFileVersion[1] = pFileVerInfo->dwFileVersionMS & 0xFFFF;
    anFileVersion[2] = pFileVerInfo->dwFileVersionLS >> 16;
    anFileVersion[3] = pFileVerInfo->dwFileVersionLS & 0xFFFF;
    m_sVersionHTMLString.Format(
        _T("%u.%u.%.4u.%.4u &beta;"),
        anFileVersion[0],
        anFileVersion[1],
        anFileVersion[2],
        anFileVersion[3]
        );
	m_pMainDialog = new CPublicDNSPluginConfigDlg( );
	m_pMainWnd = m_pMainDialog;
    if(!m_pMainDialog->Create(_T("PUBLICDNSPLUGINCONFIG_DIALOG"))) {
        return FALSE;
    }
	// The one and only window has been initialized, so show and update it
    BOOL bShowMaximized = GetProfileInt(
        _T("WindowPlacement"),
        _T("showMaximized"),
        FALSE
        );
    int left, top, right, bottom;
    CRect cNewRect;
    left    = GetProfileInt(
        _T("WindowPlacement"),
        _T("leftNormal"),
        47
        );
    top     = GetProfileInt(
        _T("WindowPlacement"),
        _T("topNormal"),
        21
        );
    right   = GetProfileInt(
        _T("WindowPlacement"),
        _T("rightNormal"),
        1018
        );
    bottom  = GetProfileInt(
        _T("WindowPlacement"),
        _T("bottomNormal"),
        681
        );
    cNewRect.left   = left;
    cNewRect.top    = top;
    cNewRect.right  = right;
    cNewRect.bottom = bottom;
    m_pMainWnd->MoveWindow( cNewRect, TRUE );
    m_pMainWnd->ModifyStyleEx(
        WS_EX_CLIENTEDGE,
        0,
        0
        );
    m_nCmdShow = (bShowMaximized) ? SW_SHOWMAXIMIZED : SW_SHOW;
	m_pMainWnd->ShowWindow( m_nCmdShow );
	m_pMainWnd->UpdateWindow( );
    return TRUE;
}



int CPublicDNSPluginConfigApp::ExitInstance()
{
    if(NULL != m_pMainDialog)
    {
        delete m_pMainDialog;
        m_pMainDialog = NULL;
        m_pMainWnd = NULL;
    }
    return CWinApp::ExitInstance();
}


CPublicDNSPluginConfigApp::~CPublicDNSPluginConfigApp()
{
    WPP_CLEANUP();
}
