Splash.cpp
上传用户:cding2008
上传日期:2007-01-03
资源大小:1812k
文件大小:6k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // CG: This file was added by the Splash Screen component.
  3. // Splash.cpp : implementation of the CSplash class
  4. //
  5. // ModelMagic 3D and 'glOOP' (OpenGL Object Oriented Programming library)
  6. // Copyright (c) Craig Fahrnbach 1997, 1999
  7. //
  8. // OpenGL is a registered trademark of Silicon Graphics
  9. //
  10. //
  11. // This program is provided for educational and personal use only and
  12. // is provided without guarantee or warrantee expressed or implied.
  13. //
  14. // Commercial use is strickly prohibited without written permission
  15. // from ImageWare Development.
  16. //
  17. /////////////////////////////////////////////////////////////////////////////
  18. #include "stdafx.h" // e.g. stdafx.h
  19. #include "resource.h" // e.g. resource.h
  20. #include "Splash.h" // e.g. splash.h
  21. #include "glOOP.h"
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char BASED_CODE THIS_FILE[] = __FILE__;
  26. #endif
  27. /////////////////////////////////////////////////////////////////////////////
  28. //   Splash Screen class
  29. BOOL CSplashWnd::c_bShowSplashWnd;
  30. CSplashWnd* CSplashWnd::c_pSplashWnd;
  31. CSplashWnd::CSplashWnd()
  32. {
  33. m_pDC = NULL;
  34. }
  35. CSplashWnd::~CSplashWnd()
  36. {
  37. // Clear the static window pointer.
  38. ASSERT(c_pSplashWnd == this);
  39. c_pSplashWnd = NULL;
  40. }
  41. BEGIN_MESSAGE_MAP(CSplashWnd, CWnd)
  42. //{{AFX_MSG_MAP(CSplashWnd)
  43. ON_WM_CREATE()
  44. ON_WM_PAINT()
  45. ON_WM_TIMER()
  46. ON_WM_PALETTECHANGED()
  47. ON_WM_QUERYNEWPALETTE()
  48. //}}AFX_MSG_MAP
  49. END_MESSAGE_MAP()
  50. void CSplashWnd::EnableSplashScreen(BOOL bEnable /*= TRUE*/)
  51. {
  52. c_bShowSplashWnd = bEnable;
  53. }
  54. void CSplashWnd::ShowSplashScreen(CWnd* pParentWnd /*= NULL*/)
  55. {
  56. if (!c_bShowSplashWnd || c_pSplashWnd != NULL)
  57. return;
  58. // Allocate a new splash screen, and create the window.
  59. c_pSplashWnd = new CSplashWnd;
  60. if (!c_pSplashWnd->Create(pParentWnd))
  61. delete c_pSplashWnd;
  62. else
  63. c_pSplashWnd->UpdateWindow();
  64. }
  65. BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
  66. {
  67. if (c_pSplashWnd == NULL)
  68. return FALSE;
  69. // If we get a keyboard or mouse message, hide the splash screen.
  70. if (pMsg->message == WM_KEYDOWN ||
  71.     pMsg->message == WM_SYSKEYDOWN ||
  72.     pMsg->message == WM_LBUTTONDOWN ||
  73.     pMsg->message == WM_RBUTTONDOWN ||
  74.     pMsg->message == WM_MBUTTONDOWN ||
  75.     pMsg->message == WM_NCLBUTTONDOWN ||
  76.     pMsg->message == WM_NCRBUTTONDOWN ||
  77.     pMsg->message == WM_NCMBUTTONDOWN)
  78. {
  79. c_pSplashWnd->HideSplashScreen();
  80. return TRUE; // message handled here
  81. }
  82. return FALSE; // message not handled
  83. }
  84. BOOL CSplashWnd::Create(CWnd* pParentWnd /*= NULL*/)
  85. {
  86. if (!m_bitmap.LoadBitmap(IDB_SPLASH))
  87. return FALSE;
  88. BITMAP bm;
  89. m_bitmap.GetBitmap(&bm);
  90. return CreateEx(NULL, NULL, NULL,
  91. WS_POPUP | WS_VISIBLE,
  92. 0, 0, bm.bmWidth, bm.bmHeight,
  93. pParentWnd->GetSafeHwnd(), NULL);
  94. }
  95. BOOL CSplashWnd::PreCreateWindow(CREATESTRUCT& cs) 
  96. {
  97. // Register a class with its own device context and the 'arrow' cursor
  98. cs.lpszClass = AfxRegisterWndClass(CS_OWNDC | CS_HREDRAW | CS_VREDRAW,
  99. ::LoadCursor(NULL, IDC_ARROW));
  100. return CWnd::PreCreateWindow(cs);
  101. }
  102. void CSplashWnd::HideSplashScreen()
  103. {
  104. // Destroy the window, and update the mainframe.
  105. DestroyWindow();
  106. AfxGetMainWnd()->UpdateWindow();
  107. }
  108. void CSplashWnd::PostNcDestroy()
  109. {
  110. // Clean up rendering context stuff
  111. if(m_pDC)
  112. delete m_pDC;
  113. // Free the C++ class.
  114. delete this;
  115. }
  116. int CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
  117. {
  118. if (CWnd::OnCreate(lpCreateStruct) == -1)
  119. return -1;
  120. // Get the Device context to our window
  121. m_pDC = new CClientDC (this);
  122. if (m_pDC == NULL)
  123. return (-1);
  124. // Center the window.
  125. CenterWindow();
  126. // Set a timer to destroy the splash screen.
  127. SetTimer(1, 2000, NULL);
  128. return 0;
  129. }
  130. void CSplashWnd::OnPaint()
  131. {
  132. CPaintDC dc(this);
  133. dc.m_ps.hdc = m_pDC->GetSafeHdc();
  134. CDC dcImage;
  135. if (!dcImage.CreateCompatibleDC(&dc))
  136. return;
  137. BITMAP bm;
  138. m_bitmap.GetBitmap(&bm);
  139. // Paint the image.
  140. CBitmap* pOldBitmap = dcImage.SelectObject(&m_bitmap);
  141. dc.BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcImage, 0, 0, SRCCOPY);
  142. dcImage.SelectObject(pOldBitmap);
  143. }
  144. void CSplashWnd::OnTimer(UINT nIDEvent)
  145. {
  146. // Destroy the splash screen window.
  147. HideSplashScreen();
  148. }
  149. void CSplashWnd::OnPaletteChanged(CWnd* pFocusWnd) 
  150. {
  151. HPALETTE hPaletteOld; // Handle to the old palette
  152. int iNumEntries; // Number of entries in the logical palette were
  153. // mapped to different entries in the system palette.
  154. if((the3dEngine.GetPalette() != NULL) && (pFocusWnd != this))
  155. {
  156. // Select the palette into the device context
  157. hPaletteOld = SelectPalette(m_pDC->GetSafeHdc(), the3dEngine.GetPalette(), FALSE);
  158. // Map entries from the currently selected palette to
  159. // the system palette.  The return value is the number 
  160. // of palette entries modified.
  161. iNumEntries = RealizePalette(m_pDC->GetSafeHdc());
  162. // Remap the current colors to the newly realized palette
  163. UpdateColors(m_pDC->GetSafeHdc());
  164. return;
  165. }
  166. CWnd::OnPaletteChanged(pFocusWnd);
  167. }
  168. BOOL CSplashWnd::OnQueryNewPalette() 
  169. {
  170. HPALETTE hPaletteOld; // Handle to the old palette
  171. int iNumEntries; // Number of entries in the logical palette were
  172. // mapped to different entries in the system palette.
  173. // If the palette was created.
  174. if(the3dEngine.GetPalette())
  175. {
  176. // Selects the palette into the current device context
  177. hPaletteOld = SelectPalette(m_pDC->GetSafeHdc(), the3dEngine.GetPalette(), FALSE);
  178. // Map entries from the currently selected palette to
  179. // the system palette.  The return value is the number 
  180. // of palette entries modified.
  181. iNumEntries = RealizePalette(m_pDC->GetSafeHdc());
  182. // Repaint, forces remap of palette in current window
  183. InvalidateRect(NULL, FALSE);
  184. return iNumEntries;
  185. }
  186. return CWnd::OnQueryNewPalette();
  187. }