khanat-opennel-code/code/nelns/login_system/nel_launcher_windows_ext/ProgressDlg.cpp

138 lines
3.1 KiB
C++

// ProgressDlg.cpp : implementation file
//
#include "stdafx.h"
#include "nel_launcher.h"
#include "ProgressDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define POS_PROGRESS_X 100
#define POS_PROGRESS_Y 32
#define POS_PROGRESS_W 300
#define POS_PROGRESS_H 6
#define TXT_PROGRESS_Y 5
#define TXT_PROGRESS_H 15
#define BG_MSG_CLR RGB(35, 64, 44)
/////////////////////////////////////////////////////////////////////////////
// CProgressDlg dialog
CProgressDlg::CProgressDlg(CWnd* pParent /*=NULL*/)
: CDialog(CProgressDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CProgressDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_font.CreateFont(12, 6, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, "Arial");
m_brushBG.CreateSolidBrush(BG_MSG_CLR);
}
void CProgressDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CProgressDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CProgressDlg, CDialog)
//{{AFX_MSG_MAP(CProgressDlg)
ON_WM_PAINT()
ON_WM_DESTROY()
ON_WM_CTLCOLOR()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CProgressDlg message handlers
void CProgressDlg::Show(BOOL bShow)
{
ShowWindow(bShow);
}
void CProgressDlg::SetRange(int iRange)
{
m_wndBar.SetRange(iRange);
}
void CProgressDlg::UpdatePos(int iPos)
{
m_wndBar.UpdatePos(iPos);
}
void CProgressDlg::UpdateMsg(CString csMsg)
{
CString csLast;
GetDlgItemText(IDC_MSG_PROGRESS_STATIC, csLast);
if(csMsg != csLast)
for(m_iClr = 0; m_iClr < 256; m_iClr += 2)
{
SetDlgItemText(IDC_MSG_PROGRESS_STATIC, csMsg);
::Sleep(2);
}
}
void CProgressDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
}
BOOL CProgressDlg::OnInitDialog()
{
CDialog::OnInitDialog();
LPCTSTR szClass = AfxRegisterWndClass(NULL);
CRect r;
GetDlgItem(IDC_MSG_PROGRESS_STATIC)->SetFont(&m_font);
m_wndBar.Create(szClass, _T("PatchBar"), WS_CHILD | WS_VISIBLE, r, this, 1234);
m_wndBar.MoveWindow(POS_PROGRESS_X, POS_PROGRESS_Y, POS_PROGRESS_W, POS_PROGRESS_H);
GetDlgItem(IDC_MSG_PROGRESS_STATIC)->MoveWindow(POS_PROGRESS_X+1, TXT_PROGRESS_Y, POS_PROGRESS_W-2, TXT_PROGRESS_H);
m_pictBG.LoadPicture(IDP_PROGRESS);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CProgressDlg::OnDestroy()
{
CDialog::OnDestroy();
m_wndBar.DestroyWindow();
}
HBRUSH CProgressDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
hbr = m_brushBG;
pDC->SetBkColor(BG_MSG_CLR);
pDC->SetTextColor(RGB(std::max(m_iClr-100, 0), m_iClr, int(m_iClr/2)));
}
return hbr;
}
BOOL CProgressDlg::OnEraseBkgnd(CDC* pDC)
{
CRect r;
GetClientRect(&r);
m_pictBG.Display(*pDC, r);
return TRUE;
}