// CG: このファイルは「スプラッシュ スクリーン」コンポーネントにより追加されています。 // Splash.cpp : インプリメンテーション ファイル // #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 ///////////////////////////////////////////////////////////////////////////// // スプラッシュ スクリーン クラス BOOL CSplashWnd::c_bShowSplashWnd; CSplashWnd* CSplashWnd::c_pSplashWnd; CSplashWnd::CSplashWnd() { } CSplashWnd::~CSplashWnd() { // スタティックなウィンドウ ポインタのクリア 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() void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/) { c_bShowSplashWnd = bEnable; } void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/) { if (!c_bShowSplashWnd || c_pSplashWnd != NULL) return; // スプラッシュ スクリーンを新規にアロケートし、ウィンドウを作成します。 c_pSplashWnd = new CSplashWnd; if (!c_pSplashWnd->Create(pParentWnd)) delete c_pSplashWnd; else c_pSplashWnd->UpdateWindow(); } void CSplashWnd::PreTranslateAppMessage(MSG* pMsg) { if (c_pSplashWnd == NULL) return; // キーボードまたはマウス メッセージを受け取った場合にスプラッシュ スクリーンを非表示にします。 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(); } } 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() { // ウィンドウを破棄し、メインフレームを更新します。 DestroyWindow(); // AfxGetMainWnd()->UpdateWindow(); } void CSplashWnd::PostNcDestroy() { // C++ クラスの Free delete this; } int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; // ウィンドウを中央に配置します。 CenterWindow(); // スプラッシュ スクリーンを破棄するまでのタイマを設定します。 SetTimer(1, 1000, NULL); return 0; } void CSplashWnd::OnPaint() { CPaintDC dc(this); CDC dcImage; if (!dcImage.CreateCompatibleDC(&dc)) return; BITMAP bm; m_bitmap.GetBitmap(&bm); // 画像を描画します。 CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap); dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY); dcImage.SelectObject(pOldBitmap); } void CSplashWnd::OnTimer(UINT nIDEvent) { // スプラッシュ スクリーン ウィンドウを破棄します。 HideSplashScreen(); }