Initial commit.
This commit is contained in:
172
tools/ModView/Splash.cpp
Normal file
172
tools/ModView/Splash.cpp
Normal file
@@ -0,0 +1,172 @@
|
||||
// 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()
|
||||
|
||||
|
||||
// the default string here was just centred by eye, if it gets changed it'll need adjusting to fit the box centre...
|
||||
//
|
||||
#define SPLASH_DEFAULT_TEXT " ( Wait... )"
|
||||
|
||||
bool gbSplashScreenRunning = false;
|
||||
bool gbSplashNotNeededByApp = false;
|
||||
bool gbSplashScreenNotNeededByTimer = false;
|
||||
CString strSplashText = SPLASH_DEFAULT_TEXT;
|
||||
void CSplashWnd::StatusMessage(LPCSTR psMessage) // can be NULL for "not bothered"
|
||||
{
|
||||
strSplashText = psMessage ? psMessage : SPLASH_DEFAULT_TEXT;
|
||||
strSplashText.TrimRight(); // remove trailing CRs which show up as black marks
|
||||
c_pSplashWnd->RedrawWindow();
|
||||
}
|
||||
|
||||
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(false);
|
||||
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(bool bCalledFromApp)
|
||||
{
|
||||
if (bCalledFromApp)
|
||||
{
|
||||
gbSplashNotNeededByApp = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (gbSplashNotNeededByApp && gbSplashScreenNotNeededByTimer)
|
||||
{
|
||||
// Destroy the window, and update the mainframe.
|
||||
c_pSplashWnd->DestroyWindow();
|
||||
AfxGetMainWnd()->UpdateWindow();
|
||||
}
|
||||
}
|
||||
|
||||
void CSplashWnd::PostNcDestroy()
|
||||
{
|
||||
// Free the C++ class.
|
||||
delete this;
|
||||
|
||||
gbSplashScreenRunning = false;
|
||||
}
|
||||
|
||||
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, 1000, NULL);
|
||||
|
||||
gbSplashScreenRunning = true;
|
||||
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);
|
||||
|
||||
dc.TextOut(58/*bm.bmWidth/2*/,180/*bm.bmHeight/2*/, strSplashText);
|
||||
}
|
||||
|
||||
void CSplashWnd::OnTimer(UINT nIDEvent)
|
||||
{
|
||||
gbSplashScreenNotNeededByTimer = true;
|
||||
HideSplashScreen(false);
|
||||
}
|
||||
Reference in New Issue
Block a user