⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 splash.cpp

📁 eCos1.31版
💻 CPP
字号:
//####COPYRIGHTBEGIN####//                                                                          // ----------------------------------------------------------------------------// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.//// This program is part of the eCos host tools.//// 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 2 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, write to the Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.//// ----------------------------------------------------------------------------//                                                                          //####COPYRIGHTEND####// CG: This file was added by the Splash Screen component.// Splash.cpp : implementation file//////===========================================================================//===========================================================================//#####DESCRIPTIONBEGIN####//// Author(s): 	sdf// Contact(s):	sdf// Date:		1998/08/11// Version:		0.01// Purpose:	// Description:	This is the implementation of the splash screen class.// Requires:	// Provides:	// See also:    // Known bugs:	// Usage:	////####DESCRIPTIONEND####////===========================================================================#include "stdafx.h"#include "resource.h"#include "Splash.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char BASED_CODE THIS_FILE[] = __FILE__;#endifIMPLEMENT_DYNAMIC( CSplashWnd, CWnd )///////////////////////////////////////////////////////////////////////////////   Splash Screen classBOOL 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_MAPEND_MESSAGE_MAP()void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/){	if(c_pSplashWnd != NULL && !bEnable){		c_pSplashWnd->HideSplashScreen();	}	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))	{		deleteZ(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*/){	UINT image = IDB_SPLASH;	if (!m_bitmap.LoadBitmap(image))		return FALSE;	BITMAP bm;	m_bitmap.GetBitmap(&bm);	BOOL rc=CreateEx(0,		AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)),		NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL);	m_hBitmap = LoadResourceBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(image));	m_pBitmap = CBitmap::FromHandle(m_hBitmap);	return rc;}HBITMAP CSplashWnd::LoadResourceBitmap(HINSTANCE hInstance, LPCTSTR lpString)                         {    HGLOBAL hGlobal;    HBITMAP hBitmapFinal = NULL;    LPBITMAPINFOHEADER  lpbi;    HDC hdc;	CDC* dc;    int iNumColors;    HRSRC  hRsrc = FindResource(hInstance, lpString, RT_BITMAP);     if (hRsrc)       {       hGlobal = LoadResource(hInstance, hRsrc);       lpbi = (LPBITMAPINFOHEADER)LockResource(hGlobal);   	   CreateDIBPalette ((LPBITMAPINFO)lpbi, &iNumColors);	   dc = GetDC();       hdc = dc->GetSafeHdc();       CPalette* oldpal = dc->SelectPalette(&Palette,FALSE);	   dc->RealizePalette();       hBitmapFinal = CreateDIBitmap(hdc,                   (LPBITMAPINFOHEADER)lpbi,                   (LONG)CBM_INIT,                   (LPSTR)lpbi + lpbi->biSize + iNumColors *					sizeof(RGBQUAD),                    (LPBITMAPINFO)lpbi,                   DIB_RGB_COLORS );       dc->SelectPalette(oldpal,FALSE);	   dc->RealizePalette();       ReleaseDC( dc );       UnlockResource(hGlobal);       FreeResource(hGlobal);       }    return (hBitmapFinal);}void CSplashWnd::HideSplashScreen(){	// Destroy the window, and update the mainframe.	DestroyWindow();	CWnd *pWnd=AfxGetMainWnd();	if(pWnd)	{		pWnd->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, 3000, 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);	for(int i=0;i<bm.bmHeight;i++){		COLORREF col=PALETTERGB(0,0,(255*i)/bm.bmHeight);		CRect rect(0,i,bm.bmWidth,i+2);		dcImage.FillSolidRect(&rect, col);	}	dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, MERGEPAINT);}void CSplashWnd::OnTimer(UINT nIDEvent){	// Destroy the splash screen window.	HideSplashScreen();	UNUSED_ALWAYS(nIDEvent);}void CSplashWnd::CreateDIBPalette (LPBITMAPINFO lpbmi, LPINT lpiNumColors){   LPBITMAPINFOHEADER	lpbi;   LPLOGPALETTE			lpPal;   HANDLE				hLogPal;   int					i;    lpbi = (LPBITMAPINFOHEADER)lpbmi;   if (lpbi->biBitCount <= 8)       *lpiNumColors = (1 << lpbi->biBitCount);   else       *lpiNumColors = 0;  // No palette needed for 24 BPP DIB    if (*lpiNumColors)      {      hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) +                             sizeof (PALETTEENTRY) * (*lpiNumColors));      lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);      lpPal->palVersion    = 0x300;      lpPal->palNumEntries = (unsigned short)*lpiNumColors;       for (i = 0;  i < *lpiNumColors;  i++)         {         lpPal->palPalEntry[i].peRed   = lpbmi->bmiColors[i].rgbRed;         lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;         lpPal->palPalEntry[i].peBlue  = lpbmi->bmiColors[i].rgbBlue;         lpPal->palPalEntry[i].peFlags = 0;         }      Palette.CreatePalette(lpPal);	  GlobalUnlock (hLogPal);      GlobalFree   (hLogPal);   }   return ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -