| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- /*
- ** 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 ;
- }
|