📄 dlgsplash.cpp
字号:
//
// DlgSplash.cpp
//
// Copyright (c) Shareaza Development Team, 2002-2004.
// This file is part of SHAREAZA (www.shareaza.com)
//
// Shareaza is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2 of
// the License, or (at your option) any later version.
//
// Shareaza is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Shareaza; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
#include "StdAfx.h"
#include "Shareaza.h"
#include "ImageServices.h"
#include "DlgSplash.h"
#include "FragmentBar.h"
IMPLEMENT_DYNAMIC(CSplashDlg, CDialog)
BEGIN_MESSAGE_MAP(CSplashDlg, CDialog)
ON_WM_PAINT()
ON_MESSAGE(WM_PRINTCLIENT, OnPrintClient)
END_MESSAGE_MAP()
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED 0x80000
#define LWA_ALPHA 0x02
#endif
#define AW_BLEND 0x00080000
#define AW_HIDE 0x00010000
#define SPLASH_WIDTH 528
#define SPLASH_HEIGHT 236
/////////////////////////////////////////////////////////////////////////////
// CSplashDlg construction
CSplashDlg::CSplashDlg(int nMax, BOOL bSilent) : CDialog( CSplashDlg::IDD, NULL )
{
m_nPos = 0;
m_nMax = nMax;
m_bSilent = bSilent;
m_sState = _T("Version ") + theApp.m_sVersion + _T("...");
m_hUser32 = NULL;
m_pfnAnimateWindow = NULL;
#ifdef _DEBUG
// m_bSilent = TRUE;
#endif
Create( IDD );
}
CSplashDlg::~CSplashDlg()
{
if ( m_hUser32 != NULL ) FreeLibrary( m_hUser32 );
}
void CSplashDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
/////////////////////////////////////////////////////////////////////////////
// CSplashDlg message handlers
BOOL CSplashDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CClientDC dcScreen( this );
CImageServices::LoadBitmap( &m_bmSplash, IDR_SPLASH, RT_PNG );
m_bmBuffer.CreateCompatibleBitmap( &dcScreen, SPLASH_WIDTH, SPLASH_HEIGHT );
m_dcBuffer1.CreateCompatibleDC( &dcScreen );
m_dcBuffer2.CreateCompatibleDC( &dcScreen );
if ( m_bSilent ) return TRUE;
SetWindowPos( NULL, 0, 0, SPLASH_WIDTH, SPLASH_HEIGHT, SWP_NOMOVE );
CenterWindow();
if ( theApp.m_bNT && ( m_hUser32 = LoadLibrary( _T("User32.dll") ) ) )
{
(FARPROC&)m_pfnAnimateWindow = GetProcAddress( m_hUser32, "AnimateWindow" );
if ( m_pfnAnimateWindow != NULL )
{
(*m_pfnAnimateWindow)( GetSafeHwnd(), 250, AW_BLEND );
}
}
SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW );
UpdateWindow();
return TRUE;
}
void CSplashDlg::Step(LPCTSTR pszText)
{
m_nPos ++;
m_sState.Format( _T("Starting %s..."), pszText );
CClientDC dc( this );
DoPaint( &dc );
}
void CSplashDlg::Topmost()
{
if ( IsWindowVisible() )
{
SetWindowPos( &wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW );
}
}
void CSplashDlg::Hide()
{
m_sState = _T("Ready");
Invalidate();
if ( m_pfnAnimateWindow != NULL )
{
(*m_pfnAnimateWindow)( GetSafeHwnd(), 250, AW_HIDE|AW_BLEND );
}
DestroyWindow();
delete this;
}
LONG CSplashDlg::OnPrintClient(WPARAM wParam, LPARAM lParam)
{
LONG lResult = Default();
CDC* pDC = CDC::FromHandle( (HDC)wParam );
DoPaint( pDC );
return lResult;
}
void CSplashDlg::OnPaint()
{
CPaintDC dc( this );
DoPaint( &dc );
}
void CSplashDlg::DoPaint(CDC* pDC)
{
CBitmap* pOld1 = (CBitmap*)m_dcBuffer1.SelectObject( &m_bmSplash );
CBitmap* pOld2 = (CBitmap*)m_dcBuffer2.SelectObject( &m_bmBuffer );
m_dcBuffer2.BitBlt( 0, 0, SPLASH_WIDTH, SPLASH_HEIGHT, &m_dcBuffer1, 0, 0, SRCCOPY );
CFont* pOld3 = (CFont*)m_dcBuffer2.SelectObject( &theApp.m_gdiFontBold );
m_dcBuffer2.SetBkMode( TRANSPARENT );
m_dcBuffer2.SetTextColor( RGB( 0, 0, 0 ) );
CRect rc( 8, 201, 520, SPLASH_HEIGHT );
UINT nFormat = DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX;
rc.OffsetRect( -1, 0 );
m_dcBuffer2.DrawText( m_sState, &rc, nFormat );
rc.OffsetRect( 2, 0 );
m_dcBuffer2.DrawText( m_sState, &rc, nFormat );
rc.OffsetRect( -1, -1 );
m_dcBuffer2.DrawText( m_sState, &rc, nFormat );
rc.OffsetRect( 0, 2 );
m_dcBuffer2.DrawText( m_sState, &rc, nFormat );
rc.OffsetRect( 0, -1 );
m_dcBuffer2.SetTextColor( RGB( 255, 255, 255 ) );
m_dcBuffer2.DrawText( m_sState, &rc, nFormat );
m_dcBuffer2.SelectObject( pOld3 );
rc.SetRect( 440, 223, 522, 231 );
m_dcBuffer2.Draw3dRect( &rc, RGB( 0x40, 0x40, 0x40 ), RGB( 0x40, 0x40, 0x40 ) );
rc.DeflateRect( 1, 1 );
m_dcBuffer2.FillSolidRect( &rc, RGB( 0x25, 0x25, 0x25 ) );
CFragmentBar::DrawFragment( &m_dcBuffer2, &rc, m_nMax, 0, min( m_nPos, m_nMax ),
RGB( 0x20, 0xB0, 0x20 ), TRUE );
m_dcBuffer2.SelectClipRgn( NULL );
pDC->BitBlt( 0, 0, SPLASH_WIDTH, SPLASH_HEIGHT, &m_dcBuffer2, 0, 0, SRCCOPY );
m_dcBuffer2.SelectObject( pOld2 );
m_dcBuffer1.SelectObject( pOld1 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -