//{{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;

}

Перейти на страницу:

Похожие книги