mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 15:41:39 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
292
Code/Tools/LevelEdit/SplashScreen.cpp
Normal file
292
Code/Tools/LevelEdit/SplashScreen.cpp
Normal file
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program 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 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// SplashScreen.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "leveledit.h"
|
||||
#include "SplashScreen.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// SplashScreenClass
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
SplashScreenClass::SplashScreenClass (void)
|
||||
: m_Size (0, 0),
|
||||
m_hFont (NULL),
|
||||
m_hBitmap (NULL),
|
||||
m_hMemDC (NULL)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// ~SplashScreenClass
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
SplashScreenClass::~SplashScreenClass (void)
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(SplashScreenClass, CWnd)
|
||||
//{{AFX_MSG_MAP(SplashScreenClass)
|
||||
ON_WM_CREATE()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_DESTROY()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// OnCreate
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
int
|
||||
SplashScreenClass::OnCreate (LPCREATESTRUCT lpCreateStruct)
|
||||
{
|
||||
if (CWnd::OnCreate(lpCreateStruct) == -1)
|
||||
return -1;
|
||||
|
||||
//
|
||||
// Load the splash background from the resource section
|
||||
//
|
||||
m_hBitmap = (HBITMAP)::LoadImage ( ::AfxGetResourceHandle (),
|
||||
MAKEINTRESOURCE (IDB_SPLASH),
|
||||
IMAGE_BITMAP,
|
||||
0,
|
||||
0,
|
||||
LR_CREATEDIBSECTION);
|
||||
|
||||
//
|
||||
// Get the dimensions of the BMP
|
||||
//
|
||||
BITMAP bmp_info = { 0 };
|
||||
if (::GetObject (m_hBitmap, sizeof (BITMAP), &bmp_info) != 0) {
|
||||
|
||||
//
|
||||
// Resize the window so the BMP compeletely fills the window
|
||||
//
|
||||
m_Size.cx = bmp_info.bmWidth;
|
||||
m_Size.cy = bmp_info.bmHeight;
|
||||
SetWindowPos ( NULL,
|
||||
(::GetSystemMetrics (SM_CXSCREEN) >> 1) - (m_Size.cx >> 1),
|
||||
(::GetSystemMetrics (SM_CYSCREEN) >> 1) - (m_Size.cy >> 1),
|
||||
m_Size.cx,
|
||||
m_Size.cy,
|
||||
SWP_NOZORDER);
|
||||
|
||||
//
|
||||
// Create a memory DC (for drawing) and the font object we will use
|
||||
//
|
||||
m_hMemDC = ::CreateCompatibleDC (NULL);
|
||||
m_hFont = ::CreateFont (-::MulDiv (7, GetDeviceCaps(m_hMemDC, LOGPIXELSY), 72),
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
FW_REGULAR,
|
||||
FALSE,
|
||||
FALSE,
|
||||
FALSE,
|
||||
ANSI_CHARSET,
|
||||
OUT_DEFAULT_PRECIS,
|
||||
CLIP_DEFAULT_PRECIS,
|
||||
DEFAULT_QUALITY,
|
||||
DEFAULT_PITCH,
|
||||
"Small Fonts");
|
||||
}
|
||||
|
||||
SetForegroundWindow ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// OnPaint
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
SplashScreenClass::OnPaint (void)
|
||||
{
|
||||
CPaintDC dc (this);
|
||||
|
||||
if (m_hMemDC != NULL && m_hBitmap != NULL) {
|
||||
|
||||
//
|
||||
// Paint the BMP into the window
|
||||
//
|
||||
HBITMAP old_bmp = (HBITMAP)::SelectObject (m_hMemDC, m_hBitmap);
|
||||
::BitBlt ((HDC)dc, 0, 0, m_Size.cx, m_Size.cy, m_hMemDC, 0, 0, SRCCOPY);
|
||||
::SelectObject (m_hMemDC, old_bmp);
|
||||
|
||||
//
|
||||
// Update the status text in the window
|
||||
//
|
||||
Paint_Status_Text (dc);
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Set_Status_Text
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
SplashScreenClass::Set_Status_Text (LPCTSTR text)
|
||||
{
|
||||
m_StatusText = text;
|
||||
|
||||
//
|
||||
// Repaint the status text area of the window
|
||||
//
|
||||
HDC hdc = ::GetDC (m_hWnd);
|
||||
Paint_Status_Text (hdc);
|
||||
::ReleaseDC (m_hWnd, hdc);
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Paint_Status_Text
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
SplashScreenClass::Paint_Status_Text (HDC hdc)
|
||||
{
|
||||
if (m_StatusText.GetLength () > 0) {
|
||||
|
||||
//
|
||||
// Select the correct font, pen, and brush into the DC
|
||||
//
|
||||
HFONT old_font = (HFONT)::SelectObject (hdc, m_hFont);
|
||||
HPEN old_pen = (HPEN)::SelectObject (hdc, ::GetStockObject (WHITE_PEN));
|
||||
HBRUSH old_brush = (HBRUSH)::SelectObject (hdc, ::GetStockObject (BLACK_BRUSH));
|
||||
::SetTextColor (hdc, RGB (255, 255, 255));
|
||||
::SetBkColor (hdc, RGB (128, 128, 128));
|
||||
|
||||
//
|
||||
// Draw the status text in its correct position
|
||||
//
|
||||
RECT rect;
|
||||
rect.left = 15;
|
||||
rect.right = m_Size.cx - 15;
|
||||
rect.top = 224;
|
||||
rect.bottom = 238;
|
||||
//::DrawText (hdc, m_StatusText, m_StatusText.GetLength (), &rect, DT_LEFT | DT_BOTTOM);
|
||||
::ExtTextOut (hdc, 15, 225, ETO_OPAQUE, &rect, m_StatusText, m_StatusText.GetLength (), NULL);
|
||||
|
||||
|
||||
// Restore the original settings
|
||||
::SelectObject (hdc, old_brush);
|
||||
::SelectObject (hdc, old_pen);
|
||||
::SelectObject (hdc, old_font);
|
||||
}
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// OnDestroy
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
SplashScreenClass::OnDestroy (void)
|
||||
{
|
||||
if (m_hMemDC != NULL) {
|
||||
::DeleteDC (m_hMemDC);
|
||||
m_hMemDC = NULL;
|
||||
}
|
||||
|
||||
if (m_hBitmap != NULL) {
|
||||
::DeleteObject (m_hBitmap);
|
||||
m_hBitmap = NULL;
|
||||
}
|
||||
|
||||
if (m_hFont != NULL) {
|
||||
::DeleteObject (m_hFont);
|
||||
m_hFont = NULL;
|
||||
}
|
||||
|
||||
CWnd::OnDestroy ();
|
||||
|
||||
//
|
||||
// Its assumed this window is operating on a separate thread...
|
||||
//
|
||||
::PostQuitMessage (0);
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// WindowProc
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
LRESULT
|
||||
SplashScreenClass::WindowProc
|
||||
(
|
||||
UINT message,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam
|
||||
)
|
||||
{
|
||||
if (message == WM_USER+102) {
|
||||
Set_Status_Text ((LPCTSTR)lParam);
|
||||
} else if (message == WM_USER+101) {
|
||||
DestroyWindow ();
|
||||
return 1L;
|
||||
}
|
||||
|
||||
return CWnd::WindowProc (message, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PostNcDestroy
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
SplashScreenClass::PostNcDestroy (void)
|
||||
{
|
||||
CWnd::PostNcDestroy ();
|
||||
|
||||
// Hehe... :)
|
||||
delete this;
|
||||
return ;
|
||||
}
|
||||
Reference in New Issue
Block a user