1 | // CG: This file was added by the Splash Screen component. |
---|
2 | // Splash.cpp : implementation file |
---|
3 | // |
---|
4 | |
---|
5 | #include "stdafx.h" // e. g. stdafx.h |
---|
6 | #include "resource.h" // e.g. resource.h |
---|
7 | |
---|
8 | #include "Splash.h" // e.g. splash.h |
---|
9 | |
---|
10 | #ifdef _DEBUG |
---|
11 | #define new DEBUG_NEW |
---|
12 | #undef THIS_FILE |
---|
13 | static char BASED_CODE THIS_FILE[] = __FILE__; |
---|
14 | #endif |
---|
15 | |
---|
16 | ///////////////////////////////////////////////////////////////////////////// |
---|
17 | // Splash Screen class |
---|
18 | |
---|
19 | BOOL CSplashWnd::c_bShowSplashWnd; |
---|
20 | CSplashWnd* CSplashWnd::c_pSplashWnd; |
---|
21 | CSplashWnd::CSplashWnd() |
---|
22 | { |
---|
23 | } |
---|
24 | |
---|
25 | CSplashWnd::~CSplashWnd() |
---|
26 | { |
---|
27 | // Clear the static window pointer. |
---|
28 | ASSERT(c_pSplashWnd == this); |
---|
29 | c_pSplashWnd = NULL; |
---|
30 | } |
---|
31 | |
---|
32 | BEGIN_MESSAGE_MAP(CSplashWnd, CWnd) |
---|
33 | //{{AFX_MSG_MAP(CSplashWnd) |
---|
34 | ON_WM_CREATE() |
---|
35 | ON_WM_PAINT() |
---|
36 | ON_WM_TIMER() |
---|
37 | //}}AFX_MSG_MAP |
---|
38 | END_MESSAGE_MAP() |
---|
39 | |
---|
40 | void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/) |
---|
41 | { |
---|
42 | c_bShowSplashWnd = bEnable; |
---|
43 | } |
---|
44 | |
---|
45 | void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/) |
---|
46 | { |
---|
47 | if (!c_bShowSplashWnd || c_pSplashWnd != NULL) |
---|
48 | return; |
---|
49 | |
---|
50 | // Allocate a new splash screen, and create the window. |
---|
51 | c_pSplashWnd = new CSplashWnd; |
---|
52 | if (!c_pSplashWnd->Create(pParentWnd)) |
---|
53 | delete c_pSplashWnd; |
---|
54 | else |
---|
55 | c_pSplashWnd->UpdateWindow(); |
---|
56 | } |
---|
57 | |
---|
58 | BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg) |
---|
59 | { |
---|
60 | if (c_pSplashWnd == NULL) |
---|
61 | return FALSE; |
---|
62 | |
---|
63 | // If we get a keyboard or mouse message, hide the splash screen. |
---|
64 | if (pMsg->message == WM_KEYDOWN || |
---|
65 | pMsg->message == WM_SYSKEYDOWN || |
---|
66 | pMsg->message == WM_LBUTTONDOWN || |
---|
67 | pMsg->message == WM_RBUTTONDOWN || |
---|
68 | pMsg->message == WM_MBUTTONDOWN || |
---|
69 | pMsg->message == WM_NCLBUTTONDOWN || |
---|
70 | pMsg->message == WM_NCRBUTTONDOWN || |
---|
71 | pMsg->message == WM_NCMBUTTONDOWN) |
---|
72 | { |
---|
73 | c_pSplashWnd->HideSplashScreen(); |
---|
74 | return TRUE; // message handled here |
---|
75 | } |
---|
76 | |
---|
77 | return FALSE; // message not handled |
---|
78 | } |
---|
79 | |
---|
80 | BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/) |
---|
81 | { |
---|
82 | if (!m_bitmap.LoadBitmap(IDB_SPLASH)) |
---|
83 | return FALSE; |
---|
84 | |
---|
85 | BITMAP bm; |
---|
86 | m_bitmap.GetBitmap(&bm); |
---|
87 | |
---|
88 | return CreateEx(0, |
---|
89 | AfxRegisterWndClass(0, AfxGetApp()->LoadStandardCursor(IDC_ARROW)), |
---|
90 | NULL, WS_POPUP | WS_VISIBLE, 0, 0, bm.bmWidth, bm.bmHeight, pParentWnd->GetSafeHwnd(), NULL); |
---|
91 | } |
---|
92 | |
---|
93 | void CSplashWnd::HideSplashScreen() |
---|
94 | { |
---|
95 | // Destroy the window, and update the mainframe. |
---|
96 | DestroyWindow(); |
---|
97 | AfxGetMainWnd()->UpdateWindow(); |
---|
98 | } |
---|
99 | |
---|
100 | void CSplashWnd::PostNcDestroy() |
---|
101 | { |
---|
102 | // Free the C++ class. |
---|
103 | delete this; |
---|
104 | } |
---|
105 | |
---|
106 | int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) |
---|
107 | { |
---|
108 | if (CWnd::OnCreate(lpCreateStruct) == -1) |
---|
109 | return -1; |
---|
110 | |
---|
111 | // Center the window. |
---|
112 | CenterWindow(); |
---|
113 | |
---|
114 | // Set a timer to destroy the splash screen. |
---|
115 | SetTimer(1, 3000, NULL); |
---|
116 | |
---|
117 | return 0; |
---|
118 | } |
---|
119 | |
---|
120 | void CSplashWnd::OnPaint() |
---|
121 | { |
---|
122 | CPaintDC dc(this); |
---|
123 | |
---|
124 | CDC dcImage; |
---|
125 | if (!dcImage.CreateCompatibleDC(&dc)) |
---|
126 | return; |
---|
127 | |
---|
128 | BITMAP bm; |
---|
129 | m_bitmap.GetBitmap(&bm); |
---|
130 | |
---|
131 | // Paint the image. |
---|
132 | CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap); |
---|
133 | dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY); |
---|
134 | dcImage.SelectObject(pOldBitmap); |
---|
135 | } |
---|
136 | |
---|
137 | void CSplashWnd::OnTimer(UINT nIDEvent) |
---|
138 | { |
---|
139 | // Destroy the splash screen window. |
---|
140 | HideSplashScreen(); |
---|
141 | } |
---|