ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ PreTranslateAppMessage ΠΊΠ»Π°ΡΡΠ° CSplashWnd Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE, ΡΠΎΠ³Π΄Π° ΠΌΠ΅ΡΠΎΠ΄ PreTranslateAppMessage ΠΊΠ»Π°ΡΡΠ° CMultiApp ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ°Π·Ρ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠΌ CSplashWnd Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ PreTranslateAppMessage ΠΊΠ»Π°ΡΡΠ° CSplashWnd Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ FALSE, ΡΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ PreTranslateMessage Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° CWinApp.
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ PreTranslateMessage ΠΊΠ»Π°ΡΡΠ° CWinApp Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠΌ ΠΊΠ»Π°Π²ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠΎΠ² Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ βΠ’Π°Π±Π»ΠΈΡΠ° Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠΎΠ²β Π³Π»Π°Π²Ρ βΠΠ΅Π½Ρ, ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡβ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² 13 ΡΠΎΠΌΠ΅ ΡΠ΅ΡΠΈΠΈ βΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°β:
BOOL CMultiApp::PreTranslateMessage(MSG* pMsg) {
// CG: The following lines were added by the Splash Screen
// component.
if (CSplashWnd::PreTranslateAppMessage(pMsg)) return TRUE;
return CWinApp::PreTranslateMessage(pMsg);
}
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ PreTranslateMessage Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° CWinApp β CWinApp::PreTranslateMessage, ΠΌΠ΅ΡΠΎΠ΄ PreTranslateMessage ΠΊΠ»Π°ΡΡΠ° CMultiApp Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ΅ΡΠΎΠ΄ OnCreate ΠΊΠ»Π°ΡΡΠ° CMainFrameΠΠ΅ΡΠΎΠ΄ OnCreate ΡΠΎΠ·Π΄Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π² Π½Π΅ΠΌ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° OnCreate ΠΊΠ»Π°ΡΡΠ° CMainFrame Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ βΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Multiβ.
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Splash Screen ΠΌΠ΅ΡΠΎΠ΄ OnCreate ΠΊΠ»Π°ΡΡΠ° CMainFrame ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ. Π Π½Π΅ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ShowSplashScreen ΠΊΠ»Π°ΡΡΠ° CSplashWnd.
ΠΠ΅ΡΠΎΠ΄ ShowSplashScreen ΠΊΠ»Π°ΡΡΠ° CSplashWnd, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΎΠΊΠ½ΠΎ Π·Π°ΡΡΠ°Π²ΠΊΠΈ, Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ Π½Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΆΠ΅:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ OnCreate Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ toolbar
if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ toolbar
TRACE0("Failed to create toolbar\n");
return -1;
}
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ°Π½Π΅Π»Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ status bar
if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) {
// ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ status bar
TRACE0("Failed to create status bar\n");
return -1;
}
// TODO: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ
// ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠ±ΡΠ°Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π°Π³ΠΈ CBRS_
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// TODO: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ,
// Π΅ΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
// CG: The following line was added by the Splash Screen
// component.
CSplashWnd::ShowSplashScreen(this);
return 0;
}
ΠΠ»Π°ΡΡ CSplashWndΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡΠ°Π²ΠΊΠΈ Splash Screen, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅ CSplashWnd. ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΡΡΠ°Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² ΠΎΠΊΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Project Workspace Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ClassView (ΡΠΈΡ. 2.4).
Π ΠΈΡ. 2.4. ΠΠΊΠ½ΠΎ Project Workspace, ΠΊΠ»Π°ΡΡ CSplashWnd
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° CSplashWnd Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°ΠΉΠ»Π΅ Splash.h. ΠΡ ΠΏΡΠΈΠ²Π΅Π»ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.1.
ΠΠ»Π°ΡΡ CSplashWnd ΡΠΎΠ·Π΄Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° CWnd. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ . ΠΠ»Π°ΡΡ CSplashWnd ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π² ΡΠ°ΠΉΠ»Π΅ Splash.h ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° DECLARE_MESSAGE_MAP, Π° Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ β Splash.cpp β ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³2.1. Π€Π°ΠΉΠ» Splash.h// CG: This file was added by the Splash Screen component.
#ifndef _SPLASH_SCRN_
#define _SPLASH_SCRN_
// Splash.h : header file
//
//////////////////////////////////////////////////////////////
// Splash Screen class
class CSplashWnd : public CWnd {
// Construction
protected:
CSplashWnd();
// Attributes:
public:
CBitmap m_bitmap;
// Operations
public:
static void EnableSplashScreen(BOOL bEnable = TRUE);
static void ShowSplashScreen(CWnd* pParentWnd = NULL);
static void PreTranslateAppMessage(MSG* pMsg);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSplashWnd)
//}}AFX_VIRTUAL
// Implementation
public:
~CSplashWnd();
virtual void PostNcDestroy();
protected:
BOOL Create(CWnd* pParentWnd = NULL);
void HideSplashScreen();
static BOOL c_bShowSplashWnd;
static CSplashWnd* c_pSplashWnd;
// Generated message map functions
protected:
//{{AFX_MSG(CSplashWnd)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnPaint();
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif
ΠΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° CSplashWnd ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΡΠ°ΠΉΠ»Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ β Splash.cpp. ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Multi. ΠΡ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.2.
ΠΠΈΡΡΠΈΠ½Π³2.2. Π€Π°ΠΉΠ» Splash.cppΠΠΈΡΡΠΈΠ½Π³ 2.2. Π€Π°ΠΉΠ» Splash.cpp
// CG: Π€Π°ΠΉΠ» Splash.cpp Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΡΠ°Π²ΠΊΠΈ
// ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Splash Screen ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°
// CSplashWnd
#include "stdafx.h"
#include "resource.h"
#include "Splash.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
//////////////////////////////////////////////////////////////
// Splash Screen class
BOOL 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_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;
// Allocate a new splash screen, and create the window.
c_pSplashWnd = new CSplashWnd;
if (!c_pSplashWnd->Create(pParentWnd)) delete 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*/) {
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(){
// Destroy the window, and update the mainframe.
DestroyWindow();
AfxGetMainWnd()->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, 750, 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);
}
void CSplashWnd::OnTimer(UINT nIDEvent) {
// Destroy the splash screen window.
HideSplashScreen();
}
ΠΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΠΉΠ» Splash.cpp ΡΠ»Π΅Π΄ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π·Π΄Π΅Π»Π° βΠΠ°ΡΡΠ°Π²ΠΊΠ° Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡβ. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° CSplashWndΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° CSplashWnd Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΡ, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠΈΡΠ΅ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Splash Screen.