// RebootPromptDlg.cpp : implementation file
//

#include "stdafx.h"
#include "PostInstallUtils.h"
#include "RebootPromptDlg.h"
#include "resource.h"
#include "AboutBox.h"

// CRebootPromptDlg dialog

IMPLEMENT_DYNCREATE(CRebootPromptDlg, CDHtmlDialog)

CRebootPromptDlg::CRebootPromptDlg(CWnd* pParent /*=NULL*/)
: CDHtmlDialog(_T("REBOOT_PROMPT_DLG"), _T("REBOOTPROMPTDLG.HTM"), pParent)
, m_sFileVersion(theApp.m_sVersionHTMLString)
, m_sRebootPurpose(_T(""))
, m_sCopyRightDates(theApp.m_sCopyRightDates)
, m_sStatusStr(_T("Готово"))
, m_sRebootPromptHtml(_T("Нажмёте кнопку <i>&quot;Перезагрузка&quot;</i>, комьютер будет перезапущен немедлено."))
{
    m_hIcon = theApp.LoadIcon(IDR_MAINFRAME);
}

CRebootPromptDlg::~CRebootPromptDlg()
{
}

void CRebootPromptDlg::DoDataExchange(CDataExchange* pDX)
{
    DDX_DHtml_ElementInnerHtml(
        pDX,
        _T("version_str"),
        m_sFileVersion
        );
    DDX_DHtml_ElementInnerHtml(
        pDX,
        _T("reboot_prompt_html"),
        m_sRebootPromptHtml
        );
    DDX_DHtml_ElementInnerText(
        pDX,
        _T("reboot_purpose"),
        m_sRebootPurpose
        );
    DDX_DHtml_ElementInnerText(
        pDX,
        _T("cr_dates"),
        m_sCopyRightDates
        );
    DDX_DHtml_ElementInnerText(
        pDX,
        _T("status_text"),
        m_sStatusStr
        );
    CDHtmlDialog::DoDataExchange(pDX);
}

BOOL CRebootPromptDlg::OnInitDialog()
{
    CDHtmlDialog::OnInitDialog();
    // Добавление пункта "О программе..." в системное меню.
    // IDM_ABOUTBOX должен быть в пределах системной команды.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
    // Задает значок для этого диалогового окна. Среда делает это автоматически,
    //  если главное окно приложения не является диалоговым
    SetIcon(m_hIcon, TRUE);			// Крупный значок
    SetIcon(m_hIcon, FALSE);		// Мелкий значок
    return TRUE;  // return TRUE  unless you set the focus to a control
}

BEGIN_MESSAGE_MAP(CRebootPromptDlg, CDHtmlDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_QUERYDRAGICON()
    ON_WM_PAINT()
    ON_WM_DESTROY()
END_MESSAGE_MAP()

BEGIN_DHTML_EVENT_MAP(CRebootPromptDlg)
    DHTML_EVENT_ONCLICK(_T("ButtonOK"), OnButtonOK)
    DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)
    DHTML_EVENT_ONCLICK(_T("about_icon"), DoAboutBox)
END_DHTML_EVENT_MAP()



// CRebootPromptDlg message handlers

HRESULT CRebootPromptDlg::OnButtonOK(IHTMLElement* /*pElement*/)
{
    OnOK();
    return S_OK;
}

HRESULT CRebootPromptDlg::OnButtonCancel(IHTMLElement* /*pElement*/)
{
    OnCancel();
    return S_OK;
}


HRESULT CRebootPromptDlg::DoAboutBox(IHTMLElement* pElement)
{
    INT_PTR nRet;
    CAboutBox oAboutBox(this);
    pElement;
    nRet = oAboutBox.DoModal();
    return S_OK;
}


void CRebootPromptDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutBox dlgAbout(this);
        dlgAbout.DoModal();
    }
    else
    {
        CDHtmlDialog::OnSysCommand(nID, lParam);
    }
}


// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR CRebootPromptDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}


// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.
void CRebootPromptDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // контекст устройства для рисования
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
        // Выравнивание значка по центру клиентского прямоугольника
        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;
        // Нарисуйте значок
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDHtmlDialog::OnPaint();
    }
}


void CRebootPromptDlg::OnDestroy()
{
    CWnd*   pParent = NULL;
    HWND    hParent = NULL;
    CDHtmlDialog::OnDestroy();
    pParent = GetParent();
    if (NULL != pParent)
    {
        hParent = pParent->Detach();
        delete pParent;
    }
}
