123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /* Copyright (c) 2002-2012 Croteam Ltd.
- This program is free software; you can redistribute it and/or modify
- it under the terms of version 2 of the GNU General Public License as published by
- the Free Software Foundation
- 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, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
- #include "StdH.h"
- #include "resource.h"
- #define NAME "Splash"
- static HBITMAP _hbmSplash = NULL;
- static BITMAP _bmSplash;
- static HBITMAP _hbmSplashMask = NULL;
- static BITMAP _bmSplashMask;
- static HWND hwnd = NULL;
- static long FAR PASCAL SplashWindowProc( HWND hWnd, UINT message,
- WPARAM wParam, LPARAM lParam )
- {
- switch( message ) {
- case WM_PAINT: {
- PAINTSTRUCT ps;
- BeginPaint(hWnd, &ps);
- HDC hdcMem = CreateCompatibleDC(ps.hdc);
- SelectObject(hdcMem, _hbmSplashMask);
- BitBlt(ps.hdc, 0, 0, _bmSplash.bmWidth, _bmSplash.bmHeight, hdcMem, 0, 0,
- SRCAND);
- SelectObject(hdcMem, _hbmSplash);
- BitBlt(ps.hdc, 0, 0, _bmSplash.bmWidth, _bmSplash.bmHeight, hdcMem, 0, 0,
- SRCPAINT);
- DeleteDC(hdcMem);
- EndPaint(hWnd, &ps);
-
- return 0;
- } break;
- case WM_ERASEBKGND: return 1; break;
- }
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- void ShowSplashScreen(HINSTANCE hInstance)
- {
- _hbmSplash = LoadBitmapA(hInstance, (char*)IDB_SPLASH);
- if (_hbmSplash==NULL) {
- return;
- }
- _hbmSplashMask = LoadBitmapA(hInstance, (char*)IDB_SPLASHMASK);
- if (_hbmSplashMask==NULL) {
- return;
- }
- GetObject(_hbmSplash, sizeof(BITMAP), (LPSTR) &_bmSplash);
- GetObject(_hbmSplashMask, sizeof(BITMAP), (LPSTR) &_bmSplashMask);
- if (_bmSplashMask.bmWidth != _bmSplash.bmWidth
- ||_bmSplashMask.bmHeight != _bmSplash.bmHeight) {
- return;
- }
- int iScreenX = ::GetSystemMetrics(SM_CXSCREEN); // screen size
- int iScreenY = ::GetSystemMetrics(SM_CYSCREEN);
- WNDCLASSA wc;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = SplashWindowProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIcon( hInstance, (LPCTSTR)IDR_MAINFRAME );
- wc.hCursor = LoadCursor( NULL, IDC_ARROW );
- wc.hbrBackground = NULL;
- wc.lpszMenuName = NAME;
- wc.lpszClassName = NAME;
- RegisterClassA(&wc);
- /*
- * create a window
- */
- hwnd = CreateWindowExA(
- WS_EX_TRANSPARENT|WS_EX_TOOLWINDOW,
- NAME,
- "SeriousSam loading...", // title
- WS_POPUP,
- iScreenX/2-_bmSplash.bmWidth/2,
- iScreenY/2-_bmSplash.bmHeight/2,
- _bmSplash.bmWidth,_bmSplash.bmHeight, // window size
- NULL,
- NULL,
- hInstance,
- NULL);
- if(!hwnd) {
- return;
- }
-
- ShowWindow( hwnd, SW_SHOW);
- RECT rect;
- GetClientRect(hwnd, &rect);
- InvalidateRect(hwnd, &rect, TRUE);
- UpdateWindow(hwnd);
- }
- void HideSplashScreen(void)
- {
- if (hwnd==NULL) {
- return;
- }
- DestroyWindow(hwnd);
- DeleteObject(_hbmSplash);
- DeleteObject(_hbmSplashMask);
- }
|