a
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
// CG: This file was added by the Splash Screen component.
|
||||
// Splash.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h" // e. g. stdafx.h
|
||||
#include "resource.h" // e.g. resource.h
|
||||
|
||||
#include "Splash.h" // e.g. splash.h
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char BASED_CODE THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Splash Screen class
|
||||
|
||||
BOOL CSplashWnd::c_bShowSplashWnd;
|
||||
CSplashWnd* CSplashWnd::c_pSplashWnd;
|
||||
CSplashWnd::CSplashWnd()
|
||||
{
|
||||
}
|
||||
|
||||
CSplashWnd::~CSplashWnd()
|
||||
{
|
||||
// Clear the static window pointer.
|
||||
ASSERT(c_pSplashWnd == this);
|
||||
c_pSplashWnd = NULL;
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
|
||||
//{{AFX_MSG_MAP(CSplashWnd)
|
||||
ON_WM_CREATE()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_TIMER()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/)
|
||||
{
|
||||
c_bShowSplashWnd = bEnable;
|
||||
}
|
||||
|
||||
void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/)
|
||||
{
|
||||
if (!c_bShowSplashWnd || c_pSplashWnd != NULL)
|
||||
return;
|
||||
|
||||
// Allocate a new splash screen, and create the window.
|
||||
c_pSplashWnd = new CSplashWnd;
|
||||
if (!c_pSplashWnd->Create(pParentWnd))
|
||||
delete c_pSplashWnd;
|
||||
else
|
||||
c_pSplashWnd->UpdateWindow();
|
||||
}
|
||||
|
||||
BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
|
||||
{
|
||||
if (c_pSplashWnd == NULL)
|
||||
return FALSE;
|
||||
|
||||
// If we get a keyboard or mouse message, hide the splash screen.
|
||||
if (pMsg->message == WM_KEYDOWN ||
|
||||
pMsg->message == WM_SYSKEYDOWN ||
|
||||
pMsg->message == WM_LBUTTONDOWN ||
|
||||
pMsg->message == WM_RBUTTONDOWN ||
|
||||
pMsg->message == WM_MBUTTONDOWN ||
|
||||
pMsg->message == WM_NCLBUTTONDOWN ||
|
||||
pMsg->message == WM_NCRBUTTONDOWN ||
|
||||
pMsg->message == WM_NCMBUTTONDOWN)
|
||||
{
|
||||
c_pSplashWnd->HideSplashScreen();
|
||||
return TRUE; // message handled here
|
||||
}
|
||||
|
||||
return FALSE; // message not handled
|
||||
}
|
||||
|
||||
BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/)
|
||||
{
|
||||
if (!m_bitmap.LoadBitmap(IDB_SPLASH))
|
||||
return FALSE;
|
||||
|
||||
BITMAP bm;
|
||||
m_bitmap.GetBitmap(&bm);
|
||||
|
||||
return CreateEx(0,
|
||||
AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
|
||||
NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL);
|
||||
}
|
||||
|
||||
void CSplashWnd::HideSplashScreen()
|
||||
{
|
||||
// Destroy the window, and update the mainframe.
|
||||
DestroyWindow();
|
||||
AfxGetMainWnd()->UpdateWindow();
|
||||
}
|
||||
|
||||
void CSplashWnd::PostNcDestroy()
|
||||
{
|
||||
// Free the C++ class.
|
||||
delete this;
|
||||
}
|
||||
|
||||
int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
||||
{
|
||||
if (CWnd::OnCreate(lpCreateStruct) == -1)
|
||||
return -1;
|
||||
|
||||
// Center the window.
|
||||
CenterWindow();
|
||||
|
||||
// Set a timer to destroy the splash screen.
|
||||
SetTimer(1, 2000, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CSplashWnd::OnPaint()
|
||||
{
|
||||
CPaintDC dc(this);
|
||||
|
||||
CDC dcImage;
|
||||
if (!dcImage.CreateCompatibleDC(&dc))
|
||||
return;
|
||||
|
||||
BITMAP bm;
|
||||
m_bitmap.GetBitmap(&bm);
|
||||
|
||||
// Paint the image.
|
||||
CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);
|
||||
dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);
|
||||
dcImage.SelectObject(pOldBitmap);
|
||||
}
|
||||
|
||||
void CSplashWnd::OnTimer(UINT nIDEvent)
|
||||
{
|
||||
// Destroy the splash screen window.
|
||||
HideSplashScreen();
|
||||
}
|
||||
Reference in New Issue
Block a user